2012-09-22 10 views
11

का उपयोग करके मॉड्यूल में कोई निर्देश या नियंत्रक उपलब्ध है या नहीं, यह जांचने के लिए कि मॉड्यूल दिए जाने पर, आप कैसे जांचते हैं कि कोई निर्देश/नियंत्रक मौजूद है या नहीं।एंगुलरज

मेरे पास एक मॉड्यूल है और मैं जानना चाहता हूं कि कुछ विशेष निर्देश लोड किए गए हैं या नहीं। नीचे कुछ नमूना कोड है:

var module = angular.module('myModule'); 
//check if controller exists 
if (module.hasController('my.first.controller')){ 
    //do something 
} 
if (module.hasDirective('my.first.directive')){ 
    //do something 
} 

मैंने इसे एक तरह से कार्यान्वित किया है। इसे डिफ़ॉल्ट रूप से उपलब्ध होने पर इसे करने का बेहतर तरीका ढूंढ रहे हैं।

क्या यह संभव है? यदि हां, तो आप यह कैसे करते हैं?

+0

क्या आप मॉड्यूल के कॉन्फ़िगरेशन चरण के दौरान उन नियंत्रकों/निर्देशों को ढूंढना चाहते हैं? या एक आवेदन के बाद बूटस्ट्रैप किया गया था (रन()) चरण निष्पादित किया गया था)? –

+0

कोई भी मेरे लिए क्या करेगा। किसी भी मामले में, मैं चेक करने से पहले, एप्लिकेशन angular.bootstrap(el,[myModule]) ritcoder

उत्तर

9

यह जांचने के लिए इस कोड का उपयोग करें कि कोई सेवा मौजूद है या नहीं। अगर एक निर्देश मौजूद

$injector.has('myServiceName')

जाँच करने के लिए आपको निर्देश नाम के बाद एक Directive प्रत्यय जोड़ना होगा:

$injector.has('myDirectiveNameDirective')

-3

नियंत्रकों और सामान को लोड करने के लिए बुलाए गए एक रैपर फ़ंक्शन को लिखकर समस्या हल करें और इस तरह मैं यह बताने में सक्षम हूं कि प्रत्येक निर्देश कब लोड होता है।

+11

का उपयोग करके बूटस्ट्रैप किया गया होगा क्या आप इस कोड को साझा कर सकते हैं? – CMCDragonkai

3

मैं कुछ काम कर कोड here

angular.service('ControllerChecker', ['$controller', function($controller) { 
    return { 
     exists: function(controllerName) { 
      if(typeof window[controllerName] == 'function') { 
       return true; 
      } 
      try { 
       $controller(controllerName); 
       return true; 
      } catch (error) { 
       return !(error instanceof TypeError); 
      } 
     } 
    }; 
}]); 

JSFiddle पाया : http://jsfiddle.net/fracz/HB7LU/6780/

2
var controllers = []; 

    _.each(app._invokeQueue, function(value, index) { 
     if (value[0] !== '$controllerProvider') { 
      return; 
     } 

     controllers.push(value[2][0]); 
    }); 

    if (controllers.indexOf('controller-i-want') === - 1) { 
     // controller is undefined 
    }