【问题标题】:How to check if a directive or controller is available in a module using Angularjs如何使用 Angularjs 检查模块中的指令或控制器是否可用
【发布时间】:2016-08-29 11:52:05
【问题描述】:

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

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

这可能吗? 如果是这样,你是怎么做到的?

【问题讨论】:

  • 你想在模块的配置阶段找出那些控制器/指令吗?或者在应用程序被引导之后(run())阶段被执行)?
  • 任何人都可以。无论如何,在我进行检查之前,应用程序将使用 angular.bootstrap(el,[myModule]) 进行引导

标签: javascript angularjs


【解决方案1】:

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

$injector.has('myServiceName')

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

$injector.has('myDirectiveNameDirective')

【讨论】:

    【解决方案2】:

    我找到了一些工作代码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/

    【讨论】:

      【解决方案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】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-20
          • 2017-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多