2014-05-06 33 views
0

角文檔顯示這個測試用例。角範圍表不表現爲記錄

 // let's assume that scope was dependency injected as the $rootScope 
     var scope = $rootScope; 
     scope.name = 'misko'; 
     scope.counter = 0; 

     expect(scope.counter).toEqual(0); 
     scope.$watch('name', function(newValue, oldValue) { 
     scope.counter = scope.counter + 1; 
     }); 
     expect(scope.counter).toEqual(0); 

     scope.$digest(); 
     // no variable change 
     expect(scope.counter).toEqual(0); 

在這裏你可以看到添加的$watch之前scope.name設置,而計數器保持爲零。

我無法的jsfiddle重現此。

http://jsfiddle.net/thinkingmedia/3ttKV/

我希望這個代碼不顯示警報的第一次。它只能在名稱更改時觸發。

 $scope.name = 'Nick'; 
     $scope.$watch('name',function(){ 
      alert('name changed'); 
     }); 

我怎樣才能得到這個工作記錄。我需要我的範圍,一些默認值進行設置,並沒有引發觀察家除非他們改變。

回答

4

當監視器被初始化監聽器將被調用,在這種情況下,NEWVALUE ===屬性oldValue,所以你需要檢查如下:

$scope.name = 'Nick'; 
$scope.$watch('name',function(newValue, oldValue){ 
    if (newValue !== oldValue) { 
     alert('name changed'); 
    } 
}); 
+0

好了,解決了這個問題。這是否意味着文檔錯誤?實際上 – cgTag

+0

@MathewFoscarini的$表的文檔在這個問題上的一個段落。 –