2015-05-12 4 views
-1

Я заходящий часы для $scope объекта не вызовет $watch события изменения, если вся стоимость не изменяются

Пример:

//Some where in .run function i set rootScope and set $watch too. 
$rootScope.config = {date:'11/4/2015',moreValues:'etc'}; 

//setting $watch 
$rootScope.$watch('config',function(new,old) { 
console.log('config value changed :)',new); 
}); 

//----->Inside Controller---------- 

//NOw THIS WILL NOT TRIGGER $watch 
$rootScope.config.date = 'another day'; 

//Same as this, it will also not trigger $watch 
var temp = $rootScope.config; 
temp.date = 'another day'; 
$rootScope.config = temp; 

//YET THIS WILL WORK JUST FINE :) AND WILL TRIGGER $watch 
var temp = angular.copy($rootScope.config); 
temp.date = 'another day'; 
$rootScope.config = temp; 

может кто-то говорит мне, почему это поведение? есть ли лучший способ вызвать $watch об изменении свойства объекта?

ответ

2

Вы можете использовать $ watchCollection или пройти третий из параметров, как истинный

$rootScope.$watch('config',function(value,old) { 
console.log('config value changed :)',value); 
}, true); 

или

$rootScope.$watchCollection('config',function(value,old) { 
console.log('config value changed :)',value); 
}); 
Смежные вопросы