2015-04-12 83 views
2
var app = angular.module('app', []); 

app.controller('TheCtrl', ['$scope', function (scope) { 

    scope.user = { 
     name: "木士羽", 
     email: '[email protected]', 
    }; 

    scope.$watch('user.name', function() { 
     console.log('change'); 
    }); 

}]); 

angular.bootstrap(document.documentElement, ['app']); 

當頁面被加載時,'change'被打印在控制檯中。

$watch在init時觸發。如何避免它?

回答

3

你看這個辦法:

第1次oldValue將等於newValue,因此通過if驗證避免這種情況。

$scope.$watch(
     function() { 
     return $scope.user.name; 
     }, 
     function(newValue, oldValue) { 
      if (oldValue !== newValue) { 
       // ..... 
      } 
     }); 

演示Fiddle

順便說一句,它是一個很好的做法寫在觀察家if (oldValue !== newValue){ /* ...*/},以避免在手錶

-1
scope.$watch('user.name', function (val) { 
    if (val !== undefined) { 
     console.log('change'); 
    } 
}); 
+0

這將是理想的代碼添加一些描述。就這個答案而言,沒有人能夠說出你做了什麼,它是如何工作的或者爲什麼它以這種方式工作。 –

+0

我想每個人都知道'''val!== undefined'''的意思。 –

0

額外的代碼執行第一次可以初始化一個標誌,爲真,一旦手錶被觸發,它可以設置爲假。這樣手錶不會被觸發。 VAR firstTime =真 ,然後在第一個$手錶火災,做

$scope.$watch('testValue', function() { 
if (firstTime) { 
$timeout(function() { firstTime = false; }); 
} else { 
    //perform operation. 

}

這是由角DOC 第一次觀看監聽器被調用,舊值推薦第二種方法和新的價值是相同的。所以檢查不相等的條件之下

$scope.$watch('testValue', function(newValue, oldValue) { 
     if (newValue !== oldValue) { 
     // perform your operation 
    } 
    }); 
0

給出具體根據docs你應該檢查新值和舊值是否不同例如

$scope.$watch('user.name', function(newVal, oldVal) { 
    if (newVal !== oldVal) { 
    // Do something with newVal 
    } 
}); 
相關問題