$scope.$watch的第二个参数是一个接收两个参数的函数:第一个是新值,第二个是旧值。
您可以简单地监视整个foo
对象,并将$scope.$watch的第三个参数设置为true
以便比较对象是否相等而不是参考。请注意,如果您的对象非常大,这可能是一个非常糟糕的主意:
$scope.$watch(
'foo',
function (newFoo, oldFoo) {
// send old $scope.foo to server with the
// previous $scope.foo.bar and $scope.foo.baz
},
true
);
您也可以单独foo.bar
观看foo.baz
:
var sendAndReplace = function (parameterName, oldParameter) {
oldFoo = angular.copy($scope.foo);
oldFoo[parameterName] = oldParameter;
// send old oldFoo to server with the
// previous oldFoo.bar oldFoo.baz
};
$scope.$watch('foo.bar', function (newValue, oldValue)) {
sendAndReplace('bar', oldValue);
});
$scope.$watch('foo.baz', function (newValue, oldValue)) {
sendAndReplace('baz', oldValue);
});