Search code examples
angularjsangularjs-ng-repeat

Show hidden div on ng-click within ng-repeat


I'm working on an Angular.js app that filters through a json file of medical procedures. I'd like to show the details of each procedure when the name of the procedure is clicked (on the same page) using ng-click. This is what I have so far, with the .procedure-details div set to 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>

I'm pretty new at angular. Any suggestions?


Solution

  • Remove the display:none, and use ng-show instead:

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

    Here's the fiddle: http://jsfiddle.net/asmKj/


    You can also use ng-class to toggle a class:

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

    I like this more, since it allows you to do some nice transitions: http://jsfiddle.net/asmKj/1/