मैं AngularJS के लिए नया हूँ और एक सेवा है कि मेरी प्रारंभिक उपयोगकर्ता विन्यास लोड करता हैAngularJS अन्य कार्यों से पहले सेवा समारोह चलाने
angular.module('myApp').service('myService', ['$http', function ($http) {
var self = this;
self.user = {};
self.loadConfiguration = function() {
$http.get('/UserConfig').then(function (result) {
self.user = result.data;
});
};
self.loadConfiguration();
}]);
मैं एक नियंत्रक इस सेवा
angular.module('myApp').controller('myController', ['$scope', 'myService', function ($scope, myService) {
var self = this;
// calculation based on service value
self.something = myService.user.something * something else;
}]);
से विन्यास का उपयोग करता है यहां समस्या यह है कि myService.user.something को अपरिभाषित किया जा सकता है क्योंकि AJAX अनुरोध पूरा होने पर यह कोड पूरा नहीं हो सकता है। क्या कोई अन्य कोड चलाने से पहले सेवा पूरी करने का कोई तरीका है? मैं सेवा फ़ंक्शन 'लोड कॉन्फ़िगरेशन' को केवल एक बार चलाने के लिए चाहता हूं चाहे इस पर निर्भर नियंत्रकों की संख्या के बावजूद।
आपका उत्तर ज्यादातर काम करता है। यह तब काम नहीं करता है जब नियंत्रक प्रारंभ होने से पहले सेवा लोड हो चुकी है क्योंकि तब $ स्कोप। $ ('MyService: getUserConfigSuccess') कभी भी आग नहीं लगेगी। –
@ उपयोगकर्ता 1 अहह, हाँ! इसलिए यदि आप सुनिश्चित करना चाहते हैं, तो आप या तो अपने नियंत्रक से 'लोड कॉन्फ़िगरेशन()' को कॉल कर सकते हैं, या नियंत्रक में पहले से लोड होने वाले उपयोगकर्ता '(यदि हां, इसका उपयोग करें; यदि नहीं, तो ईवेंट श्रोता जोड़ें) की जांच जोड़ें। –
हां, यही वह है जो मैंने किया। :) मैं अब से कई महीनों को पढ़ने में मदद करने के लिए स्वीकार किए गए उत्तर की कमी का रिकॉर्ड छोड़ना चाहता था। –