我的控制器中有一个对象$scope.foo.我想监视$scope.foo.bar和$scope.foo.baz中的任何更改并执行get请求并替换$scope.foo对象中的所有数据.在发生此更改之前,我想将$scope.foo的数据发送到具有旧$scope.foo.bar和$scope.foo.baz的服务器.
$scope.$watch('foo.bar + form.baz',function() { // send old $scope.foo to server with the // prevIoUs $scope.foo.bar and $scope.foo.baz });
我该怎么做呢? TIA
解决方法
$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',oldValue)) { sendAndReplace('baz',oldValue); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。