7

मेरे पास ASP.NET अनुप्रयोग के साथ एक आईफ्रेम है, जिसमें UpdatePanel है। मैंने एप्लिकेशन के अंदर कोणीय का उपयोग शुरू किया, लेकिन चीजें .NET पोस्टबैक के कारण काम नहीं करतीं।जांचें कि क्या AngularJS मॉड्यूल बूटस्ट्रैप किया गया है

इस का समाधान करने के लिए, मैं इस समाधान का प्रयोग किया:

with (Sys.WebForms.PageRequestManager.getInstance()) { 
      add_endRequest(onEndRequest); // regester to the end Request 
     } 

function onEndRequest(sender, args) { 
    angular.bootstrap($('#mainDiv'), ['defaultApp']); 
    var rootscope = angular.element('#mainDiv').scope(); 
    if (rootscope) { 
     rootscope.$apply(); 
    } 
} 

और यह महान काम करता है।

App Already Bootstrapped with this Element 

तो सवाल:

समस्या है जब मैं गतिशील ASP.NET पृष्ठ में एक अलग उपयोगकर्ता नियंत्रण लोड, एक और एनजी-नियंत्रक के साथ, कोणीय एक त्रुटि कह एप्लिकेशन पहले से ही भरी हुई है फेंकता है वह यह है कि है: मैं कैसे जांच सकता हूं कि ऐप पहले से बूटस्ट्रैप है या नहीं? क्या मैं इस मॉड्यूल को पुनः लोड कर सकता हूं? क्या मैं इसे तत्व से हटा सकता हूं और इसे बूटस्ट्रैप से फिर से हटा सकता हूं?

धन्यवाद।

उत्तर

2

आप बस, mainDiv के दायरे के लिए जांच कर सकता है, तो इसका मतलब है कि angular.element(document.querySelector('#mainDiv')).scope()angular अभी तक आरंभ नहीं किया गया है नहीं undefined है तो।

आप कोड नीचे दिये गये होंगे।

कोड

function onEndRequest(sender, args) { 
    //below flag will be undefined if app has not bootsrap by angular. 
    var doesAppInitialized = angular.element(document.querySelector('#mainDiv')).scope(); 
    if (angular.isUndefined(doesAppInitialized)) //if it is not 
     angular.bootstrap($('#mainDiv'), ['defaultApp']); 
    var rootscope = angular.element('#mainDiv').scope(); 
    if (rootscope) { 
     rootscope.$apply(); //I don't know why you are applying a scope.this may cause an issue 
    } 
} 

अद्यतन

बाद में अगस्त 2015, इसके प्रदर्शन से संबंधित सुधार डिबग जानकारी को अक्षम करके डीबगिंग जानकारी को अक्षम करके जोड़ा में कोणीय 1.3+ रिहाई के बाद। इसलिए आम तौर पर हमें उत्पादन पर्यावरण पर अच्छा प्रदर्शन सुधार करने के लिए झूठी डिबगिनोफ़ो विकल्प को सक्षम करना चाहिए। मैं इसके बारे में बहुत कुछ लिखना नहीं चाहता क्योंकि यह पहले से ही @AdamMcCormick उत्तर द्वारा कवर किया गया है, जो वास्तव में अच्छा है।

+0

@Guy क्या आपने जांच की, यह काम कर रहा है या नहीं? –

+0

'angular.bootstrap (...)' नहीं होगा क्योंकि प्रत्येक बार इस फ़ंक्शन को कॉल करने के लिए कोणीय को बूटस्ट्रैप करने का प्रयास करना होगा? –

+0

सहमत, डीआईएमएम। 'angular.element (...)। गुंजाइश()' बेहतर होगा। – oakfish56

14

ऐप के बाहर से दायरे तक पहुंचने के लिए यह अच्छा अभ्यास नहीं है, इसलिए यह अच्छी तरह से निर्मित उत्पादन अनुप्रयोगों में सक्षम नहीं है। यदि आपको दायरे को एक्सेस/लागू करने की आवश्यकता है तो आपके उपयोग के मामले में कुछ अजीब/असमर्थित है।

हालांकि, यह जांचने का सही तरीका है कि कोई तत्व बूटस्ट्रैप किया गया है, जिस तरह से कोणीय पुस्तकालय ऐसा करता है जो तत्व को लोड करना और इंजेक्टर की जांच करना है। तो तुम angular.element(document.querySelector('#mainDiv')).injector(); चाहते हैं जो अपने कोड बनाता है:

function onEndRequest(sender, args) { 
    var element = angular.element(document.querySelector('#mainDiv')); 

    //This will be truthy if initialized and falsey otherwise. 
    var isInitialized = element.injector(); 
    if (!isInitialized) { 
     angular.bootstrap(element, ['defaultApp']); 
    } 

    // Can't get at scope, and you shouldn't be doing so anyway 
} 

क्या आप बता सकते तुम क्यों गुंजाइश लागू करने की आवश्यकता?

+1

की सराहना करता हूं इसे सही उत्तर – trickpatty

+0

के रूप में चिह्नित किया जाना चाहिए क्या आप मुझे कुछ संदर्भ दे सकते हैं इंजेक्टर का उपयोग कर रहे हैं? आप इसे एक डोम तत्व पर बुला रहे हैं, मुझे इस उपयोग के बारे में कुछ संदर्भ कहां मिल सकते हैं? धन्यवाद – user449689

+0

@ user449689: कोणीय आंतरिक के पास कोई भी नहीं है। मुझे इसे समझने के लिए अपना कोड पढ़ना पड़ा। AFAIK, यह एकमात्र ऐसा स्थान है जहां इसे सही दृष्टिकोण के रूप में प्रकाशित किया गया है। –

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