我的代碼角`watch`不表現
function MyCtrl($scope, $log){
$scope.name = 'guy';
$scope.guy = {};
function myWatch(){
return function(newValue, oldValue){
$log.info('these are the values',newValue, oldValue);
if (newValue === oldValue){
$log.info('they are the same');
}
}
}
$scope.$watch('guy',myWatch(), true);
$scope.guy = { 'hello' : 'world' };
}
下面的代碼片段,您可以run on plunkr - 看控制檯打印!
的理念是:
- 的值賦給scope屬性
guy
- 設置
$watch
對財產 - 指定另一個值
guy
- 期待
newValue
和oldValue
是不同的,在控制檯日誌中看不到they are the same
打印 - 失敗- 更具體我希望
oldValue
是{}
和NEWVALUE是{ 'hello':'world' }
- 更具體我希望
我在做什麼錯了,我應該如何在需要時實現這個邏輯是什麼?
你看到什麼是預期的行爲。在下一個摘要循環(由於控制器初始化)發生之前,您正在更改'guy'的值兩次。所以最初的手錶運行會顯示他們兩個相同。現在看看你的控制檯..在這個例子中http://plnkr.co/edit/pAND9x?p=preview。當我們將屬性值的變化推遲到下一個摘要週期時,您將得到您最初期望的結果。 – PSL 2014-10-10 13:24:57