2012-09-22 13 views
11

In angularjs, dato un modulo, come si controlla se esiste una direttiva/controller data un modulo.Come verificare se una direttiva o un controller è disponibile in un modulo utilizzando Angularjs

Ho un modulo e voglio sapere se alcune direttive particolari sono state caricate. Di seguito è riportato un codice di esempio:

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 
} 

Ho implementato questo in un modo. Cerchi un modo migliore di farlo se è disponibile per impostazione predefinita.

È possibile? Se sì, come si fa?

+0

Vuoi scoprire quei controller/direttive durante la fase di configurazione del modulo? O dopo che un'applicazione è stata sottoposta a boot (è stata eseguita la fase run())? –

+0

Qualsiasi farà per me. In ogni caso, prima di fare il controllo, l'applicazione sarebbe stata avviata usando angular.bootstrap(el,[myModule]) ritcoder

risposta

9

Utilizzare questo codice per verificare se esiste un servizio.

$injector.has('myServiceName')

Per verificare se una direttiva esistente, è necessario aggiungere un suffisso Directive dopo il nome di direttiva:

$injector.has('myDirectiveNameDirective')

-3

Risolto il problema scrivendo una funzione wrapper che viene chiamata per caricare i controller e roba e in questo modo sono in grado di dire quando ogni direttiva viene caricata.

+11

Potresti condividere questo codice? – CMCDragonkai

3

ho trovato un po 'di codice di lavoro 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 
    } 
Problemi correlati