Mostra div nascosto su ng-click all'interno di ng-repeat


100

Sto lavorando a un'app Angular.js che filtra attraverso un file json di procedure mediche. Vorrei mostrare i dettagli di ciascuna procedura quando si fa clic sul nome della procedura (sulla stessa pagina) utilizzando ng-click. Questo è quello che ho finora, con il div .procedure-details impostato per visualizzare: nessuno:

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

Sono abbastanza nuovo in Angular. Eventuali suggerimenti?


3
Inoltre, non hai davvero bisogno di un href = "#" nell'elemento a.
Foo L

2
Lo fai se vuoi passare un validatore HTML.
Danny Bullis

Risposte:


158

Rimuovi il display:none, e usa ng-showinvece:

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

Ecco il violino: http://jsfiddle.net/asmKj/


Puoi anche usare ng-classper attivare / disattivare una classe:

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

Questo mi piace di più, dato che ti permette di fare delle belle transizioni: http://jsfiddle.net/asmKj/1/


3
Come nascondere il primo div quando clicco sul secondo div.
Utente123

Per rispondere alla domanda precedente ... Cambia semplicemente ng-class in hidden on true .... ng-class = "{'hidden': showDetails}"
Chris Lambrou

28

Usa ng-showe alterna il valore di una showvariabile di ambito nel ng-clickgestore.

Ecco un esempio funzionante: 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>

4
Come nascondere il primo div quando clicco sul secondo div.
Utente123

Questo mi lascia perplesso ... come funziona questa variabile "scope"? Quando lo provo, sono tutti nascosti !?
Nico
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.