我有一个带插件系统的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
。
怎么做?