单击“ng-repeat”元素时无法随机播放“ng-show”

Not able to shuffle the `ng-show` on click of `ng-repeat` element

点击一个元素我会显示一个列表。以及单击相同的列表元素,我隐藏了列表。但是单击不隐藏父元素的列表元素。

这是片段。单击显示并单击列表元素之一。

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

app.controller('MainCtrl', function($scope) {
  $scope.show = false;
  $scope.names = ["one", "click and hide ", "three"]
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="dropdown" ng-controller="MainCtrl">
    <span ng-click="show = !show">Show me</span>
    <ul ng-show="show">
      <li ng-repeat="name in names" ng-click="show = !show">{{name}}</li> <!-- not hiding on click -->
    </ul>
  </div>

这里有什么问题?如何解决?

ng-repeat 创建一个新范围。你需要$parent.show = !$parent.show

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

app.controller('MainCtrl', function($scope) {
  $scope.show = false;
  $scope.names = ["one", "click and hide ", "three"]
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="dropdown" ng-controller="MainCtrl">
    <span ng-click="show = !show">Show me</span>
    <ul ng-show="show">
      <li ng-repeat="name in names" ng-click="$parent.show = !$parent.show;">{{name}}</li> <!-- not hiding on click -->
    </ul>
  </div>

<div ng-app="dropdown" ng-controller="MainCtrl">
<span ng-click="show = !show">Show me</span>
<ul ng-show="show">
  <li ng-repeat="name in names" ng-click="$parent.show = !$parent.show">{{name}}</li> <!-- not hiding on click -->
</ul>

有用吗?您必须调用父级的范围 :)

您可以声明为函数并从任何地方调用。所以你可以这样做:

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

app.controller('MainCtrl', function($scope) {
  $scope.show = false;
  $scope.names = ["one", "click and hide ", "three"];
  $scope.toggle = function(){
      $scope.show = !$scope.show;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="dropdown" ng-controller="MainCtrl">
    <span ng-click="toggle()">Show me</span>
    <ul ng-show="show">
      <li ng-repeat="name in names" ng-click="toggle()">{{name}}</li> <!-- Now this is hiding on click -->
    </ul>
  </div>