1

是否可以从服务访问通常在配置中使用的提供程序?这样做的原因是我还没有在 module.config 中执行此操作所需的信息。

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

4

2 回答 2

2

如评论:

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

例如

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

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

免责声明

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

也就是说,如果你需要这样做并且它有效,那就这样吧。一定要大力测试!:)

于 2013-10-17T19:20:26.293 回答
1

我从未使用过该ui.router模块,但我认为必须在其中设置它,config因为必须在启动应用程序之前设置路由。据我了解,它的工作原理与 基本相同$routeProvider,因为您必须在配置中设置您想要执行的所有操作。

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

我猜这些$stateProvider行为是一样的。

于 2013-10-16T22:19:35.307 回答