यह आम संदेह में से एक है में $ http सेवा इस्तेमाल होता है जब AngularJS के साथ शुरू -
तो मेरे सवाल का controllerB को
नोट controllerA से डेटा पारित करने के लिए कैसे है। आपकी आवश्यकता से, मेरा मानना है कि आपका सबसे अच्छा विकल्प create a service है जो मूवी सूची पुनर्प्राप्त करता है और फिर controllerA
और controllerB
दोनों में इस सेवा का उपयोग करता है।
module.factory('youtube', function() {
var movieListCache;
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
return {
get: getMovies
};
});
फिर आप दोनों नियंत्रकों में इस सेवा को इंजेक्ट करते हैं।
module.controller('controllerA', ['youtube', function(youtube) {
youtube.get().then(function doSomethingAfterRetrievingTheMovies() {
});
}]);
module.controller('controllerB', ['youtube', function(youtube) {
youtube.get().then(function doAnotherThingAfterRetrievingTheMovies() {
});
}]);
आप controllerA की जरूरत है की जानकारी में हेरफेर करने से पहले आप बी में इसका इस्तेमाल करते हैं तो आप सेवा में अधिक तरीकों बना सकते हैं। कुछ इस तरह:
module.factory('youtube', function($q) {
var movieListCache,
deferred = $q.defer();
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
function getChangedMovies() {
return deferred.promise;
}
function setChangedMovies(movies) {
deferred.resolve(movies);
}
return {
get: getMovies,
getChanged: getChangedMovies,
setChanged: setChangedMovies
};
});
आप नहीं जानते कि क्या $q
है, take a look at the docs। एसिंक ऑपरेशंस को संभालना अनिवार्य है।
- आप नियंत्रकों पिता हैं
$rootScope
- पर वीडियो को बचा सकता है और बेटे को आप इस्तेमाल कर सकते हैं एक दूसरे को नियंत्रक को पुनः प्राप्त करने की आवश्यकता होती है:
वैसे भी, इस कार्य को भी पूरा करने के कुछ अन्य तरीके हैं
IMHO, # 1 एक सामान्य समाधान है; मैं इसका उपयोग केवल तभी करूँगा जब कोई दूसरा विकल्प न हो। और # 2 उपयोगी है यदि आपके पास इन नियंत्रकों के बीच संवाद करने की आंतरिक आवश्यकता है, जैसे किसी अन्य के अस्तित्व के बारे में किसी को कॉन्फ़िगर करना या उसे देना। example here है।
आप जो करना चाहते हैं वह स्टेटल सिंगलटन जानकारी साझा करना है; इसलिए, एक सेवा जाने का रास्ता है।
आपको एक सेवा बनाने की आवश्यकता है: इस पोस्ट को देखें। http://stackoverflow.com/a/12009408/2104976 – callmekatootie