6

Angularで「ウォッチャー」と見なされるものは何ですか? ウォッチャー自体がウォッチャーの唯一のタイプですか、それともウォッチャーなどの他の Angular 構成要素ngModelですか?

それとも全体像を見逃していますか?たとえば、ウォッチャーはディレクティブを有効にするのが好きngModelですか?

更新:ウォッチャーがいつ存在するかを知る方法はありますか? テストでは、scope.$digest() を呼び出すタイミングを知りたい

4

3 に答える 3

2

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-showandng-ifディレクティブを使用しました。$watch& これらの式は、各ダイジェスト サイクルで評価されます。

$watch(deep/simple watch) &を使用して、カスタム ウォッチャーを作成することもできます。 $watchGroup

また、ウォッチャーを使用することもできます$attrs.$observe。これはウォッチと同じように機能しますが、それが行う唯一の特別なことは、補間変数に対して機能します。

$attrs.$observe('test',function(value){
    alert('')
});

angularディレクティブのほとんどは、、、、、、、、補間ディレクティブ、フィルターなどng-repeatのウォッチャーを内部的に使用します。これらは、内部的にウォッチを配置して、双方向バインディングを管理します。ng-showng-ifng-includeng-switchng-bind{{}}

于 2015-08-03T18:18:38.830 に答える
1

ウォッチャー (基になっているドキュメントのみを取り上げる場合) は、Angular ダイジェスト サイクル中に変数または関数の結果を双方向バインディング スタイルで観察することを目的とした角度メカニズムです。ダイジェスト サイクルのトリガー イベントが何であれ。

発生する可能性のあるイベントに基づいていくつかのコードをトリガーできるAngularメカニズムを「ウォッチャー」と呼びます。

通常、ウォッチャーを作成するには、次を使用する必要があります。$scope.watch(...)

できる限りウォッチャーを避ける方がよいことに注意してください。
実際、それらのコールバックは各ダイジェスト サイクルでトリガーされ、ダーティ チェックを実行します。多くの場合、パフォーマンスに影響します。

ng-modelウォッチャーの概念とはリンクされていません。
ng-modelビューからコントローラーに変数をバインドする方法にすぎません。
これらは 2 つの異なる概念です。

于 2015-08-03T18:03:05.190 に答える