angularjs $watch旧值和新值是一样的

前端之家收集整理的这篇文章主要介绍了angularjs $watch旧值和新值是一样的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的意图是在范围内观看一个模型,并找出旧价值与新价值之间的差异。

但是,我发现旧的值和新的值都是从以下代码相同的。

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作为手表的第三个参数。这设置了深刻的手表。

Here is a working plunker.

JS:

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

app.controller('MyCtrl',$timeout){
  $scope.markers = {};
  $scope.$watch('markers',newValue);
  },true);
  $timeout( function() {
    $scope.markers.foo = 1;
  },500);
});

猜你在找的Angularjs相关文章