Используя angular, чтобы скрыть весь div из внутреннего цикла?

<div id="whole-div" ng-hide="hideme">
  <div id="loop-div" ng-repeat="i in [1, 2, 3]">
    <button ng-click="hideme=true">Button {{i}}</button> 
  </div>
</div>

выше код у меня есть сейчас. Я хочу, чтобы при нажатии одной из кнопок, сделанных в цикле (Button1, Button2, Button3), весь div скрыт. Однако я обнаружил, что могу скрыть весь div только тогда, когда кнопка находится снаружи, как следует...

<div id="whole-div" ng-hide="hideme">
  <div id="loop-div" ng-repeat="i in [1, 2, 3]">
    <button>Button {{i}}</button> </div>
  <button ng-click="hideme=true">Final Button</button>
</div>

есть ли способ скрыть весь div, используя одну из внутренних кнопок в цикле div? Заранее спасибо!

4 ответов


ng-repeat создает локальную область, чтобы переменная hideme принадлежит к этой локальной области. Там ведь 3 переменных hideme, каждый в области кнопки.

установка свойства в области $parent должна работать, и пусть переменная hideme будет уникальной для всего div:

var app = angular.module('app', []);

app.controller('MainCtrl', function($scope) {

});
<!DOCTYPE html>
<html ng-app="app">

<head>
  <meta charset="utf-8" />
  <script src="https://code.angularjs.org/1.2.28/angular.js"></script>
</head>

<body ng-controller="MainCtrl">
  <!-- here is the scope of MainCtrl, hideme can be used as is -->
  <button ng-click="hideme=false">Show all</button>
  <div id="whole-div" ng-hide="hideme">
    <div id="loop-div" ng-repeat="i in [1, 2, 3]">
      <!-- here is the scope of a button, hideme have to be prefix by $parent to access the right property -->
      <button ng-click="$parent.hideme=true">Button {{i}}</button>
    </div>
  </div>
</body>

</html>

пожалуйста, проверьте рабочий пример:http://plnkr.co/edit/Itb2UG0fPFtqsdduOlHr?p=preview

HTML-код:

<div id="whole-div" ng-hide="hideme">
    <div id="loop-div" ng-repeat="i in [1, 2, 3]">
        <button ng-click="hideOuterDiv()">Button {{i}}</button>
    </div>
</div>
:
$scope.hideOuterDiv = function() {
    $scope.hideme = true;
};

попробуйте

<div id="whole-div" ng-hide="hideme">
  <div id="loop-div" ng-repeat="i in [1, 2, 3]">
    <button ng-click="hideDivFunction();">Button {{i}}</button> 
  </div>
</div>
,
$scope.hideme = false;
$scope.hideDivFunction= function(){
    $scope.hideme = !$scope.hideme; //in case toggle is required.
}

кроме того,

$scope.hideDivFunction= function(){
angular.element( document.querySelector('#whole-div')).toggle();
    }

Я предлагаю вам изменить значение $ scope на контроллере

<div id="whole-div" ng-hide="hideme" ng-controller="myCtrl">
  <div id="loop-div" ng-repeat="i in [1, 2, 3]" >
    <button ng-click="hide()">Button {{i}}</button> 
  </div>
</div>

и в скрипт

app.controller('myCtrl',function($scope){
  $scope.hide = function(){$scope.hideme = true}
})