Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击时将所有ng if设置为false,单击的项目除外_Javascript_Html_Angularjs_Angularjs Ng Repeat_Angularjs Ng Show - Fatal编程技术网

Javascript 单击时将所有ng if设置为false,单击的项目除外

Javascript 单击时将所有ng if设置为false,单击的项目除外,javascript,html,angularjs,angularjs-ng-repeat,angularjs-ng-show,Javascript,Html,Angularjs,Angularjs Ng Repeat,Angularjs Ng Show,我有一个ng repeat,它有一个按钮,该按钮具有切换ng repeat内的ng show元素的功能 classmovie\u选项的内部有一个ng click=toggleInfo($index): 而divadditional_info有一个显示或隐藏元素的ng show <ul ng-cloak="showResult"> <li class="search_results" ng-repeat="movie in movies | orderBy

我有一个ng repeat,它有一个按钮,该按钮具有切换ng repeat内的ng show元素的功能

class
movie\u选项的内部有一个
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>
这将从hiddenDiv ng show切换ng show状态。这个很好用


我想做的是将所有hiddenDiv状态设置为false,除了单击的状态,这样只有一个ng显示为true。

这是一个纯算法问题,与角度无关

与每个项目都有一个布尔值相比,只记住应该显示的元素(索引)要简单得多:

<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>
  • {{movie.overview}
在控制器中
$scope.model={}

小提琴:我想这可以:

$scope.toggleInfo = function(index) {
     for(var i in $scope.hiddenDiv) {
         if(index != i)
             $scope.hiddenDiv[i] = false;
     }
     $scope.hiddenDiv[index] = !$scope.hiddenDiv[index];

}

当触发toggleInfo函数时,您可以手动将所有hiddenDiv元素设置为false

$scope.toggleInfo = function(index){
  for(int i = 0; i<($scope.hiddenDiv).length; i++)
    $scope.hiddenDiv[i] = false;

  $scope.hiddenDiv[index] = !$scope.hiddenDiv[index];
}
$scope.toggleInfo=函数(索引){

对于(int i=0;我已经尝试过了,但似乎没有得到预期的结果。当我有10个li元素时,在一个元素上单击如何影响其他元素而不使用函数?该li(ng repeat)中不包含单击吗?
ng click=“displayedIndex=$index”
是一个表达式。您不需要调用函数,但可以直接执行代码。如果愿意,您可以编写
ng click=“onlyDisplay($index)”
,然后在您的作用域中添加函数
$scope.onlyDisplay=function(idx){$scope.displaydex=idx;}
@PeterBoomsma实际上,在测试之后,不直接使用$scope.displayedIndex,而是将其作为属性$scope.something.displayedIndex(例如,否则行为取决于您的Angular版本)更安全。检查工作小提琴:谢谢,看起来是一个非常干净的解决方案。当用户单击图标时,它会在
模型上设置重复的索引。displayedIndex
,然后ng show会检查当前的$index是否等于model.displayedIndex,如果是,则将其设置为true。这是一个正确的假设吗?我觉得“奇怪”的是什么关于这一点,点击ng repeat如何影响其他ng repeat元素?
$scope.toggleInfo = function(index){
  for(int i = 0; i<($scope.hiddenDiv).length; i++)
    $scope.hiddenDiv[i] = false;

  $scope.hiddenDiv[index] = !$scope.hiddenDiv[index];
}