Zeige versteckte Div bei ng-click in ng-repeat

100

Ich arbeite an einer Angular.js-App, die eine JSON-Datei mit medizinischen Verfahren filtert. Ich möchte die Details jeder Prozedur anzeigen, wenn der Name der Prozedur mit ng-click (auf derselben Seite) angeklickt wird. Dies ist, was ich bisher habe, wobei das Div .procedure-details div angezeigt wird: 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>

Ich bin ziemlich neu im Winkel. Irgendwelche Vorschläge?

Sara
quelle
3
Außerdem brauchen Sie wirklich kein href = "#" im a-Element.
Foo L
2
Sie tun dies, wenn Sie einen HTML-Validator übergeben möchten.
Danny Bullis

Antworten:

158

Entfernen Sie das display:noneund verwenden Sie ng-showstattdessen:

<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>

Hier ist die Geige: http://jsfiddle.net/asmKj/


Sie können auch ng-classeine Klasse umschalten:

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

Ich mag das mehr, da es Ihnen erlaubt, einige schöne Übergänge zu machen: http://jsfiddle.net/asmKj/1/

Joseph Silber
quelle
3
Wie verstecke ich das erste Div, wenn ich auf das zweite Div klicke?
User123
Um das obige Q zu beantworten ... Ändern Sie einfach die ng-Klasse in versteckt auf wahr .... ng-class = "{'hidden': showDetails}"
Chris Lambrou
28

Verwenden Sie ng-showden Wert einer showBereichsvariablen im ng-clickHandler und schalten Sie ihn um.

Hier ist ein funktionierendes Beispiel: 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
quelle
4
Wie verstecke ich das erste Div, wenn ich auf das zweite Div klicke?
User123
Das verwirrt mich ... wie funktioniert diese "Scope" -Variable? Wenn ich es versuche, sind alle versteckt!?
Nico