1

ヒッチハイカーガイドから指令、電球例まで、

  scope.$watch(function() {
            scope.bulb = controller.getState();
        });

の最初のパラメータ$watchは関数ですが、ここで監視されているのは何ですか?

scopeに関する別の SO の投稿を読みました。これが説明です。

「メソッドの最初のパラメーター$watch(「watchExpression」) は、Angular 文字列式 ($scope に対して評価される)、または$scope最初のパラメーターとして呼び出される関数のいずれかです。」

$watch電球の例からの最初のパラメーターとしての関数の使用についてはまだ明確ではありません-スコープはその関数にパラメーターとして暗黙的に渡されますか? - その関数は暗黙的に scope.bulb を返すので、scope.bulb は監視されていますか?

4

3 に答える 3

4

いいえ、関数は監視されています。これは、関数が呼び出され、その値が適用ダイジェスト サイクルごとに少なくとも 1 回、最後に返された値に対してチェックされることを意味します。スコープは実際に渡されますが、例では使用されていません。HTH

PSウォッチ式を使用してスコープに値を設定するのは少し奇妙です。ウォッチ式関数が行うべきことは、状態を返し、コールバックでスコープ値を設定することです。つまり、チェックされるたびに設定されるのではなく、変更されたときにのみ設定されます。奇妙な例!

于 2013-09-18T11:38:31.847 に答える
0

これは、$digest が呼び出されるたびに通知されるイディオムです。ドキュメントから、次のドキュメントを参照してください$watch

$digest が呼び出されるたびに通知を受けたい場合は、watchExpression 関数をリスナーなしで登録できます。(変更が検出されると、watchExpression は $digest サイクルごとに複数回実行される可能性があるため、リスナーへの複数回の呼び出しに備えてください。)

于 2013-09-18T12:15:45.700 に答える
0

私には、これは の間違った使い方のように見えます$watch。関数は値を返す必要があり、変更が監視されますが、この場合は常に でundefinedあるため、値の変更は監視されません。より良いアプローチは、次のようなものです。

scope.$watch(function() {
    return controller.getState();
}, function(newVal) {
    scope.bulb = newVal;
});

これは の変更を監視し、変更されるたびにcontroller.getState()新しい値を に割り当てます。scope.bulb

于 2013-09-18T11:41:35.340 に答える