angularjs – 如何检查模块的存在,没有错误被提出?

前端之家收集整理的这篇文章主要介绍了angularjs – 如何检查模块的存在,没有错误被提出?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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"]);

猜你在找的Angularjs相关文章