微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AngularJS $scope.$watch $scope.foo的属性,但在更改之前将旧值发送到服务器

我的控制器中有一个对象$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] 举报,一经查实,本站将立刻删除。

相关推荐