2

我在这里参考文档:ng-checked

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

我发现的行为是,即使选中了第一个复选框,也可以取消选中第二个复选框 - 也就是说,在选中第一个复选框(主复选框)后,第二个复选框会自动选中。如果您现在尝试取消选中第二个复选框,它会起作用,我觉得很奇怪。该ng-checked指令绑定到master仍然是true.

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

只要选中主复选框,如何设法保持第二个框处于选中状态?

参考代码:

Check me to check both: <input type="checkbox" ng-model="master">
<br/>
<!-- Expecting the following input to be checked as long as the master checkbox
     is checked / User should not be able to uncheck this as long as master
     is checked -->
<input id="checkSlave" type="checkbox" ng-checked="master">
4

1 回答 1

1

ng-checked 指令可能(我没有检查 Angular 源代码)在master属性上设置了 $watch。只有当该属性发生变化时,$watch 才会触发。因此,当您更改从复选框时, $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;
});
于 2013-07-09T18:32:34.290 回答