2012-09-22 12 views
11

En angularjs, dado un módulo, ¿cómo verifica si existe una directiva/controlador dado un módulo?Cómo verificar si una directiva o controlador está disponible en un módulo usando Angularjs

Tengo un módulo y quiero saber si se han cargado algunas directivas en particular. A continuación se muestra un código de muestra:

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 
} 

Lo he implementado de una manera. Buscando una mejor manera de hacerlo si está disponible por defecto.

¿Esto es posible? Si es así, ¿cómo se hace esto?

+0

¿Desea conocer esos controladores/directivas durante la fase de configuración del módulo? O después de que una aplicación fue bootstrapped (run()) se ejecutó la fase)? –

+0

Cualquiera hará por mí. En cualquier caso, antes de hacer el cheque, la aplicación se habría iniciado usando angular.bootstrap(el,[myModule]) ritcoder

Respuesta

9

Utilice este código para verificar si existe un servicio.

$injector.has('myServiceName')

para comprobar si existe una directiva, debe agregar un sufijo Directive después de que el nombre de la directiva:

$injector.has('myDirectiveNameDirective')

-3

Resolvió el problema escribiendo una función de contenedor que se llama para cargar los controladores y esas cosas, y puedo decir cuándo se carga cada directiva.

+11

¿Podría compartir este código? – CMCDragonkai

3

me encontré con algo de código de trabajo 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 
    } 
Cuestiones relacionadas