我的目的是观察范围内的模型,并找出旧值和新值之间的差异。
但是,我发现以下代码中的旧值和新值都相同。
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第三个参数添加到监视中。这建立了一个深层的监视。
$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); });