6

मैं AngularJS बूटस्ट्रैप होने के बाद निर्भरता जोड़ना चाहता हूं। मैंने इस पोस्ट (re-open and add dependencies to an already bootstrapped application) में सुझाए गए अनुसार app.requires.push('app.main'); के माध्यम से ऐसा करने का प्रयास किया। हालांकि, यह काम नहीं करता है।AngularJS बूटस्ट्रैप के बाद निर्भरता जोड़ें

यहाँ मेरी उदाहरण कोड है:

index.html

<!DOCTYPE html> 
<html ng-app="app"> 

    <head> 
    <link rel="stylesheet" href="style.css"> 
    <script type="text/javascript" src="https://code.angularjs.org/1.4.3/angular.min.js"></script> 
    <script src="script.js"></script> 

    </head> 
    <body> 
    <h1>Hello Plunker!</h1> 
    </body> 

</html> 

script.js

var app = angular 
    .module('app',[]) 
    .run(function($http){ 
      $http.get("script2.js").success(function(data){ 
       eval(data); 
       //app.requires.push('app.main'); 
      }).error(function(){ 
       alert("error"); 
      }); 
    }); 

script2.js

alert("it's loaded"); 
angular.module('app.main', []) 
.run(function(){ 
    alert("it's running"); 
}); 
console.log(app); 
app.requires.push('app.main'); 

http://plnkr.co/edit/gN2kkoyqamB4OANXMUjA

यह क्यों काम नहीं करता है? मेरे द्वारा यह कैसे किया जा सकता है?

+0

आपको ऐसा क्यों लगता है कि यह काम नहीं किया है? http://plnkr.co/edit/T7B5t9KZTKGpSAfkJxsj?p=preview – lukkea

+0

@lukkea अगर यह काम कर रहा है, तो यह 'यह चल रहा है' अलर्ट बॉक्स दिखाना चाहिए। – user1995781

+0

मेरा संदेह यह होगा। जब आप ज़रूरतों के जरिए जोड़ते हैं तो ऐसा नहीं होता है। मैड (स्क्रिप्ट लोड करते समय ऐप पहले ही चलाया जा चुका है); क्या आपने ऐप से सेवा जोड़ने और ऐप से उस सेवा को कॉल करने का प्रयास किया है? (मुझे एहसास है कि यह आपके समाधान में फिट नहीं हो सकता है, लेकिन कम से कम यह आपको एक विचार देगा कि ऐप से उपयोग के लिए ऐप.माइन वास्तव में सही तरीके से लोड हो रहा है या नहीं। – lukkea

उत्तर

3

moduleName.requires अनियंत्रित, खराब समझ और used only by Angular injector है। इंजेक्टर, बदले में, बूटस्ट्रैपिंग के दौरान कहा जाता है (या तो ng-app या angular.bootstrap के माध्यम से) या angular.injector के साथ नया इंजेक्टर बनाना।

एक बार ऐप बूटस्ट्रैप हो गया है और कॉन्फ़िगर/रन चरण खत्म हो गए हैं, तो नई कॉन्फ़िगरेशन/रन ब्लॉक नहीं लगाए जा सकते हैं। moduleName.directive, moduleName.controller और अन्य मॉड्यूल विधियों के समान चिंताएं, ऐप बूटस्ट्रैप होने से पहले उन सभी को कॉल किया जाना चाहिए। इसलिए, वे मॉड्यूल को असंकालिक रूप से परिभाषित करने के लिए अनुपयुक्त हैं।

नव परिभाषित रन ब्लॉक by creating an injector explicitly बुलाया जा सकता है (और इसका मतलब है कि एक नई एप्लिकेशन उदाहरण बनाई गई है):

var newApp = angular.injector(['app.main']); 

यह प्राथमिक उपयोग परीक्षण है और यह उत्पादन में सीमित आवेदन है - नव instantiated ऐप और इसकी सेवाएं बूटस्ट्रैप ऐप के साथ संवाद नहीं कर सकती हैं क्योंकि सेवा सिंगलेट अलग हैं।

कोणीय में आलसी लोडिंग के लिए कुछ समाधान हैं, सबसे व्यापक ocLazyLoad है।

संबंधित मुद्दे