Afficher le div caché sur ng-clic dans ng-répéter

100

Je travaille sur une application Angular.js qui filtre à travers un fichier json de procédures médicales. Je voudrais afficher les détails de chaque procédure lorsque le nom de la procédure est cliqué (sur la même page) en utilisant ng-click. C'est ce que j'ai jusqu'à présent, avec le div .procedure-details réglé sur display: none:

<ul class="procedures">
    <li ng-repeat="procedure in procedures | filter:query | orderBy:orderProp">
        <h4><a href="#" ng-click="?">{{procedure.definition}}</a></h4>
         <div class="procedure-details">
            <p>Number of patient discharges: {{procedure.discharges}}</p>
            <p>Average amount covered by Medicare: {{procedure.covered}}</p>
            <p>Average total payments: {{procedure.payments}}</p>
         </div>
    </li>
</ul>

Je suis assez nouveau chez angular. Aucune suggestion?

Sara
la source
3
De plus, vous n'avez vraiment pas besoin d'un href = "#" dans l'élément a.
Foo L
2
Vous le faites si vous souhaitez passer un validateur HTML.
Danny Bullis

Réponses:

158

Supprimez le display:noneet utilisez à la ng-showplace:

<ul class="procedures">
    <li ng-repeat="procedure in procedures | filter:query | orderBy:orderProp">
        <h4><a href="#" ng-click="showDetails = ! showDetails">{{procedure.definition}}</a></h4>
         <div class="procedure-details" ng-show="showDetails">
            <p>Number of patient discharges: {{procedure.discharges}}</p>
            <p>Average amount covered by Medicare: {{procedure.covered}}</p>
            <p>Average total payments: {{procedure.payments}}</p>
         </div>
    </li>
</ul>

Voici le violon: http://jsfiddle.net/asmKj/


Vous pouvez également utiliser ng-classpour basculer une classe:

<div class="procedure-details" ng-class="{ 'hidden': ! showDetails }">

J'aime plus cela, car cela vous permet de faire de belles transitions: http://jsfiddle.net/asmKj/1/

Joseph Silber
la source
3
Comment masquer le premier div lorsque je clique sur le deuxième div.
User123
Pour répondre à la question ci-dessus ... Il suffit de changer la classe ng en caché sur true .... ng-class = "{'hidden': showDetails}"
Chris Lambrou
28

Utilisez ng-showet basculez la valeur d'une showvariable d'étendue dans le ng-clickgestionnaire.

Voici un exemple de travail: http://jsfiddle.net/pvtpenguin/wD7gR/1/

<ul class="procedures">
    <li ng-repeat="procedure in procedures">
        <h4><a href="#" ng-click="show = !show">{{procedure.definition}}</a></h4>
         <div class="procedure-details" ng-show="show">
            <p>Number of patient discharges: {{procedure.discharges}}</p>
            <p>Average amount covered by Medicare: {{procedure.covered}}</p>
            <p>Average total payments: {{procedure.payments}}</p>
         </div>
    </li>
</ul>
Matt York
la source
4
Comment masquer le premier div lorsque je clique sur le deuxième div.
User123
Cela me laisse perplexe ... comment fonctionne cette variable "scope"? Quand je l'essaye, tout est caché !?
Nico