2013-06-17 7 views
5

बदलने से पहले सर्वर पर पुराने मान भेजें मेरे पास मेरे नियंत्रक में $ scope.foo ऑब्जेक्ट है। मैं $ scope.foo.bar और $ scope.foo.baz में किसी भी बदलाव के लिए देखना चाहता हूं और अनुरोध प्राप्त करें और $ 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 
}); 

मैं यह करने के बारे में कैसे जाऊं? टीआईए

उत्तर

15

$scope.$watch का दूसरा पैरामीटर एक ऐसा फ़ंक्शन है जो दो पैरामीटर प्राप्त करता है: पहला वाला नया मान है, दूसरा पुराना मान है।

आप बस पूरे foo वस्तु के लिए देखते हैं, और आदेश समानता के लिए बजाय संदर्भ के लिए वस्तु की तुलना करने में true को $scope.$watch के तीसरे पैरामीटर सेट कर सकते हैं। ध्यान दें कि यह एक बहुत बुरा विचार हो सकता है अगर आपके वस्तु वास्तव में बड़ा है:

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); 
}); 
+0

प्रतिक्रिया के लिए धन्यवाद। क्या आपका दूसरा उदाहरण (sendAndReplace()) $ scope.foo पर पुरानी गुणों को भी संरक्षित करता है? – cp3

+0

समझ गया! धन्यवाद! – cp3

2

श्रोता समारोह जो आप $ करने के लिए प्रदान करते हैं:

$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 देख सकते हैं घड़ी के फ़ंक्शन में दो पैरामीटर हैं नया वैल्यू और पुराना वैल्यू जैसा कि यहां दस्तावेज़ों में वर्णित है: http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch

अपने उदाहरण में आप समेकित स्ट्रिंग पर देखते हैं, इसलिए पार्स नए वैल्यू से पुराने वैल्यूज आपको दो चर के बीच एक सेपरेटर डालना होगा:

$scope.$watch('foo.bar + ";" + foo.baz', function(newValue, oldValue) { 
     var oldValues = oldValue.split(";"); 
     var oldBar = oldValues[0]; 
     var oldBaz = oldValues[1]; 
     console.log("oldBar="+oldBar); 
     console.log("oldBaz="+oldBaz); 
    }); 
संबंधित मुद्दे