2015-10-13 149 views
3

我一直在研究一個我繼承的角項目,我無法聯繫原作者。目前這款腕錶表達我不知道的,我想知道,如果有人可以幫助我理解代碼:

$scope.$watch(calculator.value, function(newVal, oldVal) { 
    if(newVal !== oldVal) { 
     i = newVal; 
     updateCalculation(); 
    } 
}); 

什麼困惑我的是這行代碼:newVal !== oldVal。任何想法爲什麼需要這樣的檢查?

+0

不熟悉'$ watch'

  • 所以匹配舊值與新值並調用該方法,但是不是隻是檢查值是否改變? – MinusFour

  • 回答

    5

    作用域的$watch方法將始終執行回調至少一次。第一次它的新舊值是一樣的。

    $scope.$watch(calculator.value, function(newVal, oldVal) { 
        if(newVal === oldVal) { 
         console.log('First time watcher is executed'); 
        } 
        if(newVal !== oldVal) { 
         console.log('Watcher called because values changed.'); 
        } 
    }); 
    

    您給出的示例指出,只有當值發生更改時,它纔會執行updateCalculations()。不是第一次觀察者被調用。

    +1

    這似乎是唯一正確的答案。在做了更多的讀操作之後,我發現只有當值已被更改時,偵聽器函數纔會在$ digest循環中執行,但它也會在啓動時執行一次。 – user2352164

    0

    即使值沒有改變,$ watch也會在$ digest循環的每一回閤中被調用。所以我只能假設updateCalculation()只應該在值改變時才被調用。

    0
    1. 在範圍上有一個值,如 $ scope.calculator.value = 0;
    2. 觀看時與每一個消化呼叫,但可能是該值未改變,如果只是有任何改變