我在视图中有一个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正在为每个项目创建一个单独的范围吗?
答案 0 :(得分:2)
是的,ngRepeat
正在为每个项目创建一个单独的范围。见AngularJS ngRepeat
来自@doodeec评论的ngRepeat指令从a中为每个项目实例化一次模板 采集。每个模板实例都有自己的范围...
编辑
您可以切换父作用域。
ng-click="$parent.isOn = !$parent.isOn"