服务访问提供商

时间:2013-10-16 16:40:59

标签: angularjs

是否可以访问通常在服务配置中使用的提供程序?这样做的原因是我没有能够在module.config中完成它所需的信息。

我想访问的提供者是$ stateProvider,它是ui.router模块的一部分。假设我有一个依赖于其他模块的模块。我希望能够让这些依赖项通过服务注册其“所需”的路由/状态,然后使用该服务确定我实际注册的那些。我希望这不需要在配置中完成,因为我实际上只会添加新状态,而不是删除或修改已存在的状态。所以基本上,我希望我的服务获取状态/路由列表并让服务注册它们而不是在配置中进行注册。

2 个答案:

答案 0 :(得分:2)

评论如下:

在配置阶段之后,您将无法注入提供程序。但是,您可以在配置阶段注入并将其存储在某个地方,直到您需要它为止。

例如

app.config(function($stateProvider) {
    window.stateProvider = $stateProvider;
});

app.service('myService', function() {
    var $stateProvider = window.state provider;
    // ...
});

声明(S)

虽然我建议这是一种可能性,但我当然不会推荐它。这将使您的代码难以测试,我怀疑它是否得到官方支持,所以即使您可以访问它,也无法保证提供商能够正常工作。

那就是说,如果你需要做到这一点并且它起作用那么就这样吧。一定要大力测试! :)

答案 1 :(得分:1)

我从未使用ui.router模块,但我认为必须在config中进行设置,因为必须在应用启动之前设置路由。根据我的理解,它的工作原理与$routeProvider基本相同,因为你必须在配置中设置你想要做的所有事情。

它没有明确说明(我可以看到),但找到的文档/示例here似乎表明$routeProvider只能在模块声明中访问(即{{1} }}或在app.module('myMod', [], function($routeProvider){ ... })函数内部。

我猜测app.config的行为方式相同。