5

なぜ私はいつもこれをしなければならないのかを知ることに興味があります

$scope.$watch( function() {
   return $scope.someData;
}, function( value ) {
   console.log( value );
});

angular が実際にデータを監視するために、なぜこれを行う必要があるのでしょうか。

私がこのようなことをしたら

$scope.$watch($scope.someData, function( value ) {
   console.log( value );
});

どちらがいいですか、それは決して機能しませんか?

私もこれを工場でよく使います

$dataそれは私がしなければならない工場だと言う

$scope.$watch( function() {
   return $data.someData;
}, function( value ) {
   console.log( value );
});
4

4 に答える 4

8

これは機能します:

$scope.$watch("someData", function( value ) {
   console.log( value );
});
于 2013-08-13T16:50:02.423 に答える
1

やり方の答えはすでに与えられているので、実際に何が起こっているのか、なぜ最初に試したようにうまくいかなかったのかを説明しようと思います.

まず、このコードは確実に機能します。

$scope.$watch(function() {
   return $scope.someData;
}, function(value) {
   console.log(value);
});

しかし、これは完璧な方法ではありません。より正確に言うと、このように関数に を$watch挿入します。scope

$scope.$watch(function(injectedScope) {
   return injectedScope.someData;
}, function(value) {
   console.log(value);
});

以前は、 と が同じものだったため機能$scopeinjectScopeていました。

この記事で説明しているように、

$scopeがwatch関数に渡されるため、スコープを引数として期待し、応答で値を返す関数を監視できることを意味します。これの良い例は$interpolate 関数です。

$interpolateしたがって、あなたの場合、次のように利用することもできます。

$scope.$watch($interpolate("{{someData}}"), function(value) {
    ...
});

ここで、ウォッチ式のみを使用する簡単な方法に行き着きます。 実際には補間$watchされた式を受け入れることもできます。

したがって$scope.$watch("someData", ... )

someDataになります:

  1. として補間{{someData}}
  2. $watch関数によって注入されたスコープを使用する

これは、実際の関数の代わりに式を書くための、きれいで読みやすく簡潔な方法です。しかし、最終的には、このようなすべてのコンパイルの後、監視する値を返すのは最終的に関数です。

于 2014-10-15T16:21:44.087 に答える