5

コントローラーにオブジェクト $scope.foo があります。$scope.foo.bar と $scope.foo.baz の変更を監視し、get リクエストを実行して $scope.foo オブジェクトのすべてのデータを置き換えたいと考えています。この変更が発生する前に、古い $scope.foo.bar と $scope.foo.baz を使用して、$scope.foo のデータをサーバーに送信したいと考えています。

$scope.$watch('foo.bar + form.baz', function() {
    // send old $scope.foo to server with the 
    // previous $scope.foo.bar and $scope.foo.baz
});

どうすればこれを行うことができますか?ティア

4

2 に答える 2

15

$scope.$watchの 2 番目のパラメーターは、2 つのパラメーターを受け取る関数です。最初のパラメーターは新しい値で、2 番目のパラメーターは古い値です。

オブジェクト全体を単純に監視し、$scope.$watchfooの 3 番目のパラメーターを に設定して、オブジェクトを参照ではなく等しいかどうか比較することができます。オブジェクトが非常に大きい場合、これはかなり悪い考えになる可能性があることに注意してください。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);
});
于 2013-06-17T18:56:35.580 に答える