我一直在学习角度,并在尝试访问父控制器时发现了这一点 http://jsfiddle.net/eqb23s8t/
我希望使用$ parent从ng-repeat内部的父控制器访问相同的变量,因此当按下其中一个复选框时,所有都应该更新,但事实并非如此。为什么?。
<div ng-app ng-controller="ParentCtrl">
<ul>
<li ng-repeat="city in cities">{{city}}<input type="checkbox" ng-checked="$parent.somevar" /></li>
</ul>
</div>
答案 0 :(得分:4)
首先,你的jsFiddle定义了一个ChildCtrl但它没有效果,因为你从不使用它。你可以删除它。
其次,如ngChecked文档中所述,ngChecked和ngModel之间存在差异: https://docs.angularjs.org/api/ng/directive/ngChecked
如果您期望发生的事情是同时选中/取消选中所有复选框,您可能需要ngModel而不是ngChecked。
从您的问题中不清楚您实际上要做什么,但这里是您的jsFiddle的一个分支,用于说明通过$ parent变量进行数据共享:
它只是执行以下操作:
<li ng-repeat="city in cities">{{city}}<input type="checkbox" ng-model="$parent.somevar" /></li>
说明这两个概念。
答案 1 :(得分:2)
您没有为视图绑定模型,这可以反映更改。当前代码只读取模型(在本例中为somevar
)状态。使用ng-model
代替ng-checked
。角度将处理其余部分:
<强> HTML 强>
<div ng-app ng-controller="ParentCtrl">
<ul>
<li ng-repeat="city in cities">{{city}}<input type="checkbox" ng-model="$parent.somevar" /></li>
</ul>
</div>
<强> JS 强>
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
$scope.somevar = true;
}
答案 2 :(得分:1)
答案 3 :(得分:1)
我也是Angular的新手,所以我错了。但是我在代码中看到的东西很少......首先,根本不使用ChildCtrl
。其次,看起来只有ng-model
指令应用了双向绑定到复选框。但ng-checked
仅用于添加| checked
属性。
答案 4 :(得分:1)
先生,请使用ng-model来指代父母的范围。 这是我为你创建的演示[demo] [1]
[1]: http://jsfiddle.net/nwg7bwLx/