i have ng-repeat has button has function toggles ng-show element inside ng-repeat.
the inside class movie_option
span has ng-click=toggleinfo($index)
:
and div additional_info
has ng-show shows or hides element.
<ul ng-cloak="showresult"> <li class="search_results" ng-repeat="movie in movies | orderby: '-release_date' track $index"> <div class="movie_info"> <div class="movie_options"> <div class="slide"> <span class="movie_option"> <span><i class="fa fa-question-circle" aria-hidden="true" ng-click="toggleinfo($index)"></i></span> </span> </div> </div> </div> <div class="additional_info" ng-show="hiddendiv[$index]"> {{movie.overview}} </div> </li> </ul>
when user clicks on icon calls function:
$scope.toggleinfo = function (index) { $scope.hiddendiv[index] = !$scope.hiddendiv[index]; }
this toggles ng-show state hiddendiv ng-show. works fine.
what wanted put hiddendiv states on false except 1 clicked 1 ng-show true.
that's pure algorithm problem, not related angular.
instead of having boolean per item, simpler remember element (index) should displayed:
<ul ng-cloak="showresult"> <li class="search_results" ng-repeat="movie in movies | orderby: '-release_date' track $index"> <div class="movie_info"> <div class="movie_options"> <div class="slide"> <span class="movie_option"> <span><i class="fa fa-question-circle" aria-hidden="true" ng-click="model.displayedindex = $index"></i></span> </span> </div> </div> </div> <div class="additional_info" ng-show="$index === model.displayedindex"> {{movie.overview}} </div> </li> </ul>
and in controller $scope.model = {}
fiddle: http://jsfiddle.net/6dklqgfl/
Comments
Post a Comment