Angularで「ウォッチャー」と見なされるものは何ですか? ウォッチャー自体がウォッチャーの唯一のタイプですか、それともウォッチャーなどの他の Angular 構成要素ngModel
ですか?
それとも全体像を見逃していますか?たとえば、ウォッチャーはディレクティブを有効にするのが好きngModel
ですか?
更新:ウォッチャーがいつ存在するかを知る方法はありますか? テストでは、scope.$digest() を呼び出すタイミングを知りたい
Angularで「ウォッチャー」と見なされるものは何ですか? ウォッチャー自体がウォッチャーの唯一のタイプですか、それともウォッチャーなどの他の Angular 構成要素ngModel
ですか?
それとも全体像を見逃していますか?たとえば、ウォッチャーはディレクティブを有効にするのが好きngModel
ですか?
更新:ウォッチャーがいつ存在するかを知る方法はありますか? テストでは、scope.$digest() を呼び出すタイミングを知りたい
watchers
古い値と新しい値を追跡するダーティチェックに他なりません
それらは各ダイジェスト サイクルで評価されます。スコープ変数または任意の式の組み合わせにすることができます。Angular は、ダイジェスト サイクルごとにこのウォッチャーをすべて収集し、$$watchers
配列内に維持します。コントローラー内で行うことで、ウォッチャーの数を確認できますconsole.log($scope.$watchers)
。
マークアップ
<body class="container" ng-controller="myCtrl">
Hello {{test}}
I'm test to show $$watchers {{test1}}
<div ng-show="show">SHowiing this div using ng-show</div>
<div ng-if="show">SHowiing this div using ng-show</div>
Watcher is not compulsary that should scope variables {{'1'}}
</body>
{{}}
上記のコードで、ウォッチャー配列に配置される 3 つの補間ディレクティブがあることがわかるように、ウォッチャーの数を推測します。コンソール$scope.$$watchers
で見ると、5 つのウォッチャーが表示されます。
なぜそこに5人のウォッチャーが表示されますか。3 しか見えないので、実際には、属性値で提供される式に内部的に配置するng-show
andng-if
ディレクティブを使用しました。$watch
& これらの式は、各ダイジェスト サイクルで評価されます。
$watch
(deep/simple watch) &を使用して、カスタム ウォッチャーを作成することもできます。$watchGroup
また、ウォッチャーを使用することもできます$attrs.$observe
。これはウォッチと同じように機能しますが、それが行う唯一の特別なことは、補間変数に対して機能します。
$attrs.$observe('test',function(value){
alert('')
});
angularディレクティブのほとんどは、、、、、、、、補間ディレクティブ、フィルターなどng-repeat
のウォッチャーを内部的に使用します。これらは、内部的にウォッチを配置して、双方向バインディングを管理します。ng-show
ng-if
ng-include
ng-switch
ng-bind
{{}}
ウォッチャー (基になっているドキュメントのみを取り上げる場合) は、Angular ダイジェスト サイクル中に変数または関数の結果を双方向バインディング スタイルで観察することを目的とした角度メカニズムです。ダイジェスト サイクルのトリガー イベントが何であれ。
発生する可能性のあるイベントに基づいていくつかのコードをトリガーできるAngularメカニズムを「ウォッチャー」と呼びます。
通常、ウォッチャーを作成するには、次を使用する必要があります。$scope.watch(...)
できる限りウォッチャーを避ける方がよいことに注意してください。
実際、それらのコールバックは各ダイジェスト サイクルでトリガーされ、ダーティ チェックを実行します。多くの場合、パフォーマンスに影響します。
ng-model
ウォッチャーの概念とはリンクされていません。
ng-model
ビューからコントローラーに変数をバインドする方法にすぎません。
これらは 2 つの異なる概念です。