2014-05-14 3 views
-1

$ watchCollection을 사용하여 개체를보고 있습니다. 콜백에서 객체의 어떤 속성이 변경되었는지 알고 싶지만 콜백에있는 문제는 새 값과 이전 값이 모두 같은 객체입니다. 개체를보고 개체의 속성을 변경하는 방법을 찾을 수 있습니까?

http://jsfiddle.net/SQuVy/325/

angular.module('watchApp', []).controller('watchCtrl', function($scope) { 
    $scope.count = 0; 
    $scope.b = { 
     value1: 1, 
     value2: 2,  
     value3: 3 
    }; 

    $scope.$watchCollection('b', function(newvalue,oldvalue) { 
      console.log(newvalue);// both new and old are same objects 
      console.log(oldvalue); 
    }, true); 
}); 

감사합니다.

+1

https://github.com/angular/angular.js/issues/2621 내가 각도 개발자 모르겠지만 대신'$의 watch'을 사용할 수 없습니다? http://jsfiddle.net/SQuVy/333/ –

+0

@ A.Wolff 네, 그게 문제입니다, 그는 여기에 콜렉션이 없어요. 그는 js 객체를 가지고 있습니다. 배열이 아니므로,'$ watch ' –

+0

중복 가능성 : https://github.com/angular/angular.js/issues/2621 –

답변

-1

$scope 속성에 대한 참조가 업데이트 될 때마다 $watch이 해고됩니다. 이는 참조가 가리키는 객체가 변경되었음을 의미하지는 않으며 참조 자체 만 변경되었습니다.

컬렉션을 보는 것도 마찬가지입니다. 이 문제를 방지하려면 다음 코드를 시도 :

$scope.$watchCollection('b', function(val, prev){ 
    if(val !== prev){ 
     // do whatever you need here 
    } 
}); 
+0

그가 게시 한 코드와 어떤 차이점이 보이지 않습니다. –

+0

@ bto.rdz : 'if (val! = = prev)'line? 그게 차이 야 ... – tennisgent

+0

미안해. 네가 추가했음을 잊어 버렸어. '// 네가 여기서 필요로하는 것을해라.'제발 바이올린을 보아라,이게 문제가 아니야, 나는 downvoted btw를하지 않았다. –

관련 문제