2016-04-10 55 views
0

任何原因爲什麼$scope.$watch將被調用,當它正在觀看的值不存在應用程序中的任何地方?

正如你可以看到下面,不管我怎樣分配字符串爲watchExpression,函數運行...

$scope.$watch('kwhefjkewgfweahhfwujad' , // a bunch of random letters 
       function() 
        { console.log("it fired ... why?"); 
        } 
      ) ; 

Firefox不表示任何錯誤。

+0

它看的$官方文檔中解釋。 –

+0

我在這裏:https://docs.angularjs.org/api/ng/type/$rootScope.Scope ...但我沒有看到任何暗示爲什麼它可能被稱爲... – dsdsdsdsd

+0

它說: *監聽器在註冊後的第一個$ digest循環中總是被調用*。 –

回答

1

嘗試

$scope.$watch('kwhefjkewgfweahhfwujad', function(val) { 
    if (val) { 
     console.log("it fired ... why?"); 
    } 
}); 

觀察家每消化週期運行。當您正在觀察附加到範圍的原始值時,您需要驗證新值是否存在(並已更改)。

你也可以做

$scope.$watch('kwhefjkewgfweahhfwujad', function(newVal, oldVal) { 
    if (newVal !== oldVal) { 
     console.log("it fired ... why?", newVal, oldVal); 
    } 
}); 
+0

直到大約一個小時之前,我沒有提到,我沒有遇到問題(我認爲這只是渾濁起來這個問題)...我認爲這是一個解決方案,即使它不能解釋我的意外行爲改變......我只能在我自己身上找到......奇怪的...... ...謝謝,香農 – dsdsdsdsd

相關問題