2014-04-22 2 views
1

내가 잘못 사용했을 수도 있지만 변수를 감시하는 함수가 있고 해당 변수가 뷰에서 변경되면 함수가 실행됩니다. 그러나 형제 함수가 해당 변수를 변경하면 시계가 작동하지 않습니다. 내가 잘못 코딩 한 거니?Angular JS - Scope Watch가 업데이트되지 않음

scope.$watch (settings.number, function(val){ 
    alert('test'); 
}) 
scope.exampleObj = { 
    exampleFunc : function(){ 
     settings.number += 5; 
    } 
}; 

그래서 scope.exampleObj.exampleFunc(); 스코프 감시가 호출되어서는 안됩니까?

+0

를 방문 나는 아이들이 내 변화가 변화를 유발하지 않는 생각합니다. 수 자체를보고, 부모 개체에 포함하는 대신 번호를 업데이트 해 볼 수 있습니까? 잘 모르겠지만 구버젼의 이전 버전에서 같은 문제가 발생했습니다 – Anoop

답변

2

같이, 기능 또는 사용 $의 watchCollection에 문자열 바꾸기 :

를 VAR 사용 :

angular.module('TestApp', []) 
    .controller('MainCtrl', function($scope){ 
     // Object 
     var settings = { 
      number: 1, 
      foobar: 'Hello World' 
     }; 

     $scope.$watch(function(){ return settings.number; }, function(newValue, oldValue){ 
      console.log('New value detected in settins.number'); 
     }); 

     $scope.$watchCollection(function(){ return settings; }, function(newValue, oldValue){ 
      console.log('New value detected in settings'); 
     }); 
    }); 

사용 $ 범위 :

angular.module('TestApp', []) 
    .controller('MainCtrl', function($scope){ 
     // Object 
     $scope.settings = { 
      number: 1, 
      foobar: 'Hello World' 
     }; 

     $scope.$watch('settings.number', function(newValue, oldValue){ 
      console.log('New value detected in $scope.settings.number'); 
     }); 
    }); 

예 : http://jsfiddle.net/Chofoteddy/2SNFG/

* 참고 : AngularJS 버전 1.1.x 이상에서 사용할 수있는 $ watchCollection. 객체의 배열이나 여러 속성에서 여러 값을보아야하는 경우에 유용합니다.

1

watcher는 객체 자체가 아닌 범위 내부에있는 속성의 이름 (즉 문자열)을 예상합니다. 나는 어딘가에 있으리라 믿고있어

scope.$watch ('settings.number', function(newval,oldval){ 
    alert('test'); 
}); 
    scope.exampleObj = { 
    exampleFunc : function(){ 
     scope.settings.number += 5; 
    } 
}; 

당신은 scope.settings.number 먼저 선언, 당신은 당신은 단지 각 scope의 재산 변수를 볼 수 scope.settings.number하지 settings.number을 설정하는 데 의미가있다.

그냥 settings.number += 5;으로 올바른 일을하고있을 지 모르지만 나는 피곤할 수 있습니다.

+0

작동 예제 http://jsfiddle.net/Ld7ub/ –

+0

@marck, 왜 당신에게 친절한 선생님에게 감사드립니다 :). 나는이 문제가'$ scope' 변수를 보지 못했다고 가정하고 있습니다. –

+0

@marck 변수가 더 높게 선언 된 경우 문제는이 부분이 아닙니다. 시간 간격으로 업데이트 된 숫자가 없으면 작동합니다. – pashOCONNOR

0

objectEquality을 true로 설정해야합니다. 그래서 당신은 reference equality를 비교하는 대신에 angular.equals를 사용하여 객체 equality를 비교할 수 있습니다.

더 많은 정보를 정기적으로이 the documentation

scope.$watch (settings.number, function(val){ 
    alert('test'); 
},true) 
scope.exampleObj = { 
    exampleFunc : function(){ 
     settings.number += 5; 
    } 
}; 
관련 문제