14

在 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
}

我已经以某种方式实现了这一点。如果默认情况下可用,则寻找更好的方法。

这可能吗?如果是这样,你如何做到这一点?

4

4 回答 4

17

使用此代码检查服务是否存在。

$injector.has('myServiceName')

要检查指令是否存在,必须Directive在指令名称后添加后缀:

$injector.has('myDirectiveNameDirective')

于 2015-03-29T19:13:28.470 回答
3

我在这里找到了一些工作代码

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/

于 2015-07-24T23:30:09.867 回答
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
    }
于 2015-10-24T20:42:45.287 回答
-3

通过编写一个包装函数来解决这个问题,该函数被调用来加载控制器和东西,这样我就可以知道每个指令何时加载。

于 2012-09-29T01:24:41.263 回答