2012-11-09 18 views
9

मैं केवल कोणीय जेएस सीख रहा हूं (कोणीय-बीज का उपयोग करके) और मुझे साइट साइट लोड के पहले JSON फ़ीड से अपनी साइट कॉन्फ़िगरेशन लोड करने की आवश्यकता है।AngularJS: ऐप लोड से पहले जेसन फ़ीड कैसे लोड करें?

दुर्भाग्यवश, $ http या $ संसाधन का उपयोग करके शेष ऐप को लोड करने के लिए समय में फ़ीड वापस नहीं आता है।

ऐप को बाकी ऐप से पहले इस डेटा को लोड करने के लिए मजबूर करने का सही तरीका क्या है?

उत्तर

5

आपको Controller.resolve विधि का उपयोग करना होगा। मिस्को (कोर कोणीय डेवलपर में से एक) का जवाब देखें https://stackoverflow.com/a/11972028/726711

+0

धन्यवाद, मैंने साइट कॉन्फ़िगरेशन नियंत्रक बनाया है और इसे अन्य सभी नियंत्रकों पर शामिल करने के लिए इसका उपयोग किया है, जिसकी आवश्यकता है। सभी काम कर रहे हैं, लेकिन मुझे लगता है कि ऐसा करने का एक बेहतर तरीका हो सकता है। – Bunkered

+5

क्या होगा यदि नियंत्रक मार्ग से जुड़ा हुआ नहीं है? –

0

हल करने की विधि का उपयोग करके मेरे सभी यूनिट परीक्षण तोड़ दिए गए ... मैं इस तरह से गया, जहां सेटिंग एक सेवा है।

$q.when(settings.loadConfig()).then(function() { 
    console.log(settings.versionedApiUrl); 
}); 

फिर, मैं जाँच लें कि हम पहले से ही यकीन है कि हम एक बार से अधिक का अनुरोध नहीं करते बनाने के लिए सेटिंग्स लोड कर दिया है।

class settings { 
    loadConfig = ():angular.IPromise<any> => { 

       var deferred = this.q.defer(); 

       if(this.settingsLoaded ){ 
         deferred.resolve({}) 
         return deferred.promise; 
       } 

       this.http({ 
         url:'config.json' 
       }).then((result) => { 

         if(result.data){ 
          this.versionedApiUrl = result.data.versionedApiUrl; 
          this.apiServer = result.data.apiServer; 
          this.widgetServiceRoot = result.data.widgetServiceRoot; 
          this.settingsLoaded = true; 
         } 

         deferred.resolve({}); 
       }); 
       return deferred.promise; 
      } 
} 
संबंधित मुद्दे