2013-06-05 37 views
2

看起來,在更改對象屬性時,該對象上的監視器會觸發 - 除非將該屬性設置爲函數。

angular.module('app', []) 
.controller('ctrl', function($scope) { 

    $scope.object1 = {}; 
    $scope.object2 = {}; 

    $scope.clicked1 = function() { 
     $scope.object1.message = "Object1 property changed"    
    } 

    $scope.clicked2 = function() { 
     $scope.object1.fn = function() { 
      return "Object1 fn changed"; 
     } 
    } 

    $scope.$watch('object1', function(o) { 
     if (o.message) 
      $scope.object2.message = o.message + ', and watch fired'; 
     else if (o.fn) { 
      $scope.object2.message = o.fn(); 
     } 
    }, true); 
}); 

請參閱http://jsfiddle.net/TkWP6/。當clicked1被調用時,$ watch按照預期觸發,但是當clicked2被調用時,什麼都不會發生。

簡單的問題是爲什麼不能,而且可以做任何事情來讓$ watch手錶着火。

回答

2

當你傳遞的最後一個參數屬實,角使用其對象相等功能比較的對象的過去和現在的狀態:

http://docs.angularjs.org/api/angular.equals

在屬性對比,功能類型的屬性和 名稱以$開頭的屬性將被忽略。

我想如果你想手錶觸發,你將不得不在改變功能屬性的同時改變一個額外的屬性。

相關問題