Как проверить, доступна ли директива или контроллер в модуле с помощью Angularjs
В angularjs, заданном модулем, как вы проверяете, существует ли директива/контроллер с помощью модуля.
У меня есть модуль, и я хочу знать, были ли загружены некоторые определенные директивы. Ниже приведен пример кода:
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
}
Я реализовал это в некотором роде. Ищите лучший способ сделать это, если он доступен по умолчанию.
Возможно ли это?
Если да, как вы это делаете?
Ответы
Ответ 1
Используйте этот код, чтобы проверить, существует ли служба.
$injector.has('myServiceName')
Чтобы проверить, существует ли директива, вы должны добавить суффикс Directive
после имени директивы:
$injector.has('myDirectiveNameDirective')
Ответ 2
Я нашел некоторый рабочий код здесь
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/
Ответ 3
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
}
Ответ 4
Решила проблему, написав функцию-оболочку, которая вызывается для загрузки контроллеров и т.д., и при этом я могу сказать, когда загружается каждая директива.