从ngRepeat更新$ scope变量

时间:2014-02-21 11:27:39

标签: javascript angularjs

我在视图中有一个ngRepeat循环,对于每个项目,我都有一个自定义切换控件连接到$scope变量,如下所示:

<a ng-repeat="item in items" ng-click="isOn = !isOn" ng-class="{on: isOn}">
   Toggle!
</a>

点击链接时,isO n变量按预期切换,但仅针对项目点击。我希望所有项目都更新,因为isOn在控制器中定义为$scope.isOn = false

当我使用控制器方法切换变量所有项目都会更新!

<a ng-repeat="item in items" ng-click="toggle()" ng-class="{on: isOn}">
   Toggle!
</a>

--- controller ---

$scope.toggle = function() {
    $scope.isOn = !$scope.isOn;
}

你能解释一下这种行为吗?是因为ngRepeat正在为每个项目创建一个单独的范围吗?

1 个答案:

答案 0 :(得分:2)

是的,ngRepeat正在为每个项目创建一个单独的范围。见AngularJS ngRepeat

  

ngRepeat指令从a中为每个项目实例化一次模板   采集。每个模板实例都有自己的范围...

来自@doodeec评论的

编辑

您可以切换父作用域。 ng-click="$parent.isOn = !$parent.isOn"