检查是否可以将依赖项加载到AngularJS模块中

时间:2018-06-07 18:09:51

标签: angularjs plugins dependency-injection angularjs-factory angularjs-module

我有一个带插件系统的AngularJS应用程序。可能安装或不安装插件,我需要知道是否可以加载该插件。

在插件中注册一个像这样的工厂:

const module = angular.module('myplugin', []);
module.factory('myplugin', function() {
   return function() {
       // do stuff
   }
}

在申请表中,我有:

const module = angular.module('myapp', ['myplugin']);
module.controller('somecontoller', function(myplugin) {
   myplugin(); // do stuff
}

如果myplugin不存在(即应用程序中未安装插件),AngularJS会抛出错误:

Error: Uncaught Error: [$injector:modulerr] Failed to instantiate module myapp due to:
Error: [$injector:modulerr] Failed to instantiate module app/dashboard due to:
Error: [$injector:modulerr] Failed to instantiate module myplugin due to:
Error: [$injector:nomod] Module 'myplugin' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

该插件为应用程序提供了额外的功能,但应用程序必须显示/隐藏一些UI元素,具体取决于插件是否未加载。

我找到了一些方法:

但他们看起来都有些笨拙......

使用$injector.has('myplugin')不起作用,因为myplugin的依赖项中未包含myapp将始终返回false

怎么做?

0 个答案:

没有答案