Pet*_*sma 3 html javascript angularjs angularjs-ng-repeat angularjs-ng-show
我有一个ng-repeat,它有一个按钮,其功能可以在ng-repeat中切换ng-show元素.
类movie_option跨度内部有ng-click=toggleInfo($index):
div additional_info有一个显示或隐藏元素的ng-show.
<ul ng-cloak="showResult">
<li class="search_results" ng-repeat="movie in movies | orderBy: '-release_date' track by $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>
Run Code Online (Sandbox Code Playgroud)
当用户点击图标时,它会调用此函数:
$scope.toggleInfo = function (index) {
$scope.hiddenDiv[index] = !$scope.hiddenDiv[index];
}
Run Code Online (Sandbox Code Playgroud)
这会从hiddenDiv ng-show切换ng-show状态.这很好用.
我想要做的是将所有hiddenDiv状态设置为false,除了单击的那个,因此只有一个ng-show是真的.
这是一个纯算法问题,与Angular无关.
而不是每个项目都有一个布尔值,只记得应该显示的元素(索引)要简单得多:
<ul ng-cloak="showResult">
<li class="search_results" ng-repeat="movie in movies | orderBy: '-release_date' track by $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>
Run Code Online (Sandbox Code Playgroud)
并在你的控制器 $scope.model = {}
小提琴:http://jsfiddle.net/6dkLqgfL/