3

ng-repeat에는 ng-repeat 요소를 토글하는 기능이있는 버튼이 있습니다.클릭 한 항목을 제외하고 클릭하면 모든 ng-if를 false로 설정합니다.

그리고 DIV additional_info 표시하거나 요소를 숨기는 NG 쇼를 가지고 클래스 movie_option 범위 안에

ng-click=toggleInfo($index)있다. 사용자가 아이콘을 클릭하면

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

는이 함수를 호출

$scope.toggleInfo = function (index) { 
     $scope.hiddenDiv[index] = !$scope.hiddenDiv[index]; 
    } 

이것은 hiddenDiv 겨 쇼에서 NG 쇼 상태에서 다른 상태로 전환합니다. 이것은 잘 작동합니다.

내가 원한 것은 모든 hiddenDiv 상태를 false로 놓는 것입니다. 단 하나의 ng-show 만 클릭하면 true가됩니다.

답변

5

순수한 알고리즘 문제입니다. 각도와 관련이 없습니다.

대신 항목 당 부울을 가지고, 단지 표시되어야하는 요소 (인덱스) 기억하는 것이 훨씬 간단 할 것이다 :

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

을 그리고 당신의 컨트롤러를 $scope.model = {}

바이올린 : http://jsfiddle.net/6dkLqgfL/

+0

나는 이것을 시도했지만 예상 한 결과를 얻지 못하는 것 같습니다. li 요소가 10 개일 경우 을 클릭하면 함수가없는 나머지 다른 요소에 어떻게 영향을 줍니까? 클릭이 해당 li (ng-repeat)에 포함되어 있지 않습니까? –

+0

'ng-click = "displayedIndex = $ index"는 표현식입니다. 함수를 호출 할 필요는 없지만 코드를 직접 실행할 수 있습니다. 원하는 경우,'ng-click = "onlyDisplay ($ index)"'라고 쓰고 범위 안에'$ scope.onlyDisplay = function (idx) {$ scope.displayedIndex = idx; }' – floribon

+0

@ PeterBoomsma 그리고 실제로 $ scope.displayedIndex를 직접 사용하지 않고 $ scope.something.displayedIndex 속성으로 사용하는 것이 안전합니다 (그렇지 않으면 동작은 사용자의 Angular 버전에 따라 다릅니다). 작동중인 바이올린을 확인하십시오. http://jsfiddle.net/6dkLqgfL/ – floribon

1

나는이 할 것이라고 생각 :

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

} 
0

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]; 
}