澄清ng-checked指令

时间:2013-07-09 17:43:51

标签: angularjs

我在这里引用该文档:ng-checked

此处,在页面底部提供的示例中,您可以看到单击第一个复选框也会检查第二个框。

我发现的行为是,即使选中第一个复选框,也可以取消选中第二个复选框 - 也就是说,在选中第一个复选框(主复选框)后,第二个复选框会自动检查。如果您现在尝试取消选中第二个复选框,那么我觉得很奇怪。 ng-checked指令绑定到仍为master的{​​{1}}模型。

为什么可以取消选中第二个框? true不应该确保检查状态始终与表达式同步 - 也就是说,只要第一个复选框仍然被选中,ng-checked NOT不允许取消选中第二个复选框?

只要选中master复选框,如何设置检查第二个框?

参考代码:

ng-checked

1 个答案:

答案 0 :(得分:1)

ng-checked指令可能(我没有检查Angular源代码)在master属性上设置$ watch。只有当该属性发生变化时,才会触发$ watch。因此,当您更改slave复选框时,$ watch不会触发,因此会发生更改。

如果您想让第二个复选框与第一个复选框保持同步,请将ng-model添加到奴隶,

<input type="checkbox" ng-model="slave" ng-checked="master">

然后在模型更改的任何时候强制同步:

$scope.$watch(
   function() { return $scope.master + $scope.slave; }
  ,function() { $scope.slave = $scope.master; }
);

Fiddle

请注意,这也可以:

$scope.$watch('master + slave', function() {
   $scope.slave = $scope.master;
});