32

ページの読み込み直後に$watchがトリガーされるのはなぜですか? どうすればこれを防ぐことができますか?

http://jsfiddle.net/dcSRu/2/

function MyCtrl($scope) {
    // Init scope vars
    $scope.data_copy = {};

    // If data_copy changes...
    $scope.$watch("data_copy", function(newValue, oldValue) {

        alert("$watch triggered!");

    }, true);
}
4

3 に答える 3

50

最初の実行では両方の値 (newValueoldValue) が等しいので、等しいかどうかを確認することで簡単にエスケープできます。

$scope.$watch("data_copy", function(newValue, oldValue) {
  if(newValue === oldValue){
    return;
  }
  alert("$watch triggered!");
});

PLUNKER

于 2013-04-08T09:14:14.027 に答える
0

ここにはすでに非常に素晴らしい議論があります:

AngularJS でモデルの変更を監視するときに初期ロードを無視するにはどうすればよいですか?

$scope.$watch('fieldcontainer', function (new_fieldcontainer, old_fieldcontainer) {

if (typeof old_fieldcontainer === '未定義') return;

// 変更されたオブジェクトを処理するためのその他のコードがここにあります。

});

于 2015-11-13T10:35:28.340 に答える