programing

angularjs $watch old 값과 new 값이 동일합니다.

telebox 2023. 2. 26. 09:33
반응형

angularjs $watch old 값과 new 값이 동일합니다.

제 의도는 범위 내에서 모델을 보고 오래된 가치와 새로운 가치를 구별하는 것입니다.

그러나 아래 코드에서 이전 값과 새 값이 모두 동일하다는 것을 알게 되었습니다.

app.controller('MyCtrl', function($scope, $timeout){
  $scope.markers = {};
  $scope.$watchCollection('markers', function(newValue, oldValue){
    console.log('being watched oldValue:', oldValue, 'newValue:', newValue);
  });
  $timeout( function() {
    $scope.markers.foo = 1;
  }, 500);
  $timeout( function() {
    $scope.markers.bar = 2;
  }, 500);
});

출력:

being watched oldValue: Object {} newValue: Object {} script.js:6
being watched oldValue: Object {foo: 1} newValue: Object {foo: 1} script.js:6
being watched oldValue: Object {foo: 1, bar: 2} newValue: Object {foo: 1, bar: 2} 

왜 같은지, 고의적인 거라면 왜?

이것은 코드입니다.http://plnkr.co/edit/rfMCF4x6CmVVT957DPSS?p=preview

사용할 수 있습니다.$watch오히려 효과가 있는 것 같아요오브젝트의 모든 속성도 (실행 중) 감시하려면true워치의 세 번째 파라미터로 지정합니다.이것으로 철저한 감시 태세를 갖추게 된다.

여기 작동하는 플런커가 있습니다.

JS:

app = angular.module('myApp',[]);

app.controller('MyCtrl', function($scope, $timeout){
  $scope.markers = {};
  $scope.$watch('markers', function(newValue, oldValue){
    console.log('being watched oldValue:', oldValue, 'newValue:', newValue);
  }, true);
  $timeout( function() {
    $scope.markers.foo = 1;
  }, 500);
  $timeout( function() {
    $scope.markers.bar = 2;
  }, 500);
});

새로운 값과 오래된 값이 동일한지 확인하고(값에서) 이 경우 프로세스를 건너뛰면 예기치 않은 동작을 방지할 수 있습니다.이를 위해 angular.equals를 사용할 수 있습니다.다음은 예를 제시하겠습니다.

JS:

$scope.$watch('myObject', function(newValue, oldValue){
    if(angular.equals(newValue, oldValue)){
        return; // simply skip that
    }
});

이것은 버그입니다.

https://github.com/angular/angular.js/issues/2621

고쳐지지 않은 것 같아요.

값은 파라미터로 전달됩니다.

$scope.$watch('foo', function (newValue, oldValue) {
  // ...
}

언급URL : https://stackoverflow.com/questions/20751954/angularjs-watch-old-value-and-new-value-are-the-same

반응형