2

ここでドキュメントを参照します:ng-checked

ここでは、ページの下部にある例で、最初のチェックボックスをクリックすると 2 番目のボックスもチェックされることがわかります。

これで私が見つけた動作は、最初のチェックボックスがオンになっている場合でも、2 番目のチェックボックスをオフにすることができるということです。つまり、最初のチェックボックス (マスターチェックボックス) をオンにした後、2 番目のチェックボックスが自動的にオンになります。2番目のチェックボックスをオフにしようとすると、奇妙に思えます。ディレクティブは、まだ であるモデルにng-checkedバインドされています。 mastertrue

では、なぜ 2 番目のボックスのチェックを外すことができるのでしょうか? ng-checkedチェックされた状態が常に式と同期していることを確認するべきではありませんか?

マスターチェックボックスがチェックされている限り、2番目のボックスをチェックしたままにするにはどうすればよいですか?

参照コード:

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 のソース コードを調べていません) が、プロパティに $watch を設定しmasterます。そのプロパティが変更された場合にのみ、$watch が起動します。したがって、スレーブ チェックボックスを変更すると、$watch が起動しないため、変更が発生します。

2 番目のチェックボックスを最初のチェックボックスと同期させたい場合は、スレーブに 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 に答える