在Angular 1.2中,ngRoute是一个单独的模块,因此您可以使用其他社区路由器,如ui.router。
我编写一个开源模块,旨在为多个不同的路由器实现工作。那么如何检查加载或存在哪个路由器?
我在我的模块中的一个工厂里做以下,但它不工作,我期望它的方式:
if (angular.module("ngRoute")) // Do ngRoute-specific stuff. else if (angular.module("ui.router")) // Do ui.router-specific stuff.
它会为无法加载的模块引发错误。例如,如果应用程序使用ui.router,那么会出现ngRoute检查的以下错误:
Uncaught Error: [$injector:nomod] Module ‘ngRoute’ 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.
我不知道一种检查方法,没有提出错误;但是,请注意,问题是它是一个未捕获的错误,而不是错误抛出。捕获这种错误的模式如下。
try { angular.module("ngRoute") } catch(err) { /* Failed to require */ }
如果捕获到错误,您可以尝试其他模块,如果没有,您可以使用第一个。
如果你的行为对于每个模块是一样的,你可以做一些类似下面的事情,我们定义一个函数,它将尝试第一个列出的模块名称,如果抛出一个错误,请尝试下一个选项。
var tryModules = function(names) { // accepts a list of module names and // attempts to load them,in order. // if no options remain,throw an error. if( names.length == 0 ) { throw new Error("None of the modules could be loaded."); } // attempt to load the module into m var m; try { m = angular.module(names[0]) } catch(err) { m = null; } // if it could not be loaded,try the rest of // the options. if it was,return it. if( m == null ) return tryModules(names.slice(1)); else return m; }; tryModules(["ngRoute","ui.router"]);