我有一个极端边缘的情况,我有一个我必须在配置期间定义的回调方法。这意味着没有范围,没有工厂等......我的工作是使用根注入器($ injector)并在运行时获取我的其他模块。
然而,当我在回调中调用$ injector.get(' myServiceName')时(在应用程序运行之后),我得到了#34;未知提供商"。在我的代码行运行之前,相同的服务没有问题(实际上是)。如果我调用$ injector.get(" myServiceNameProvider")那么我可以在我的回调中恢复提供者..但是另一个只有工厂的服务我根本无法获得。
因此,在这种极其糟糕的做法中,我如何能够阻止我配置的服务。哎,我甚至无法获得$ rootScope ..
答案 0 :(得分:0)
首先是Angular inits提供者,然后是工厂/服务 - app.config
中没有提供服务。
你可以像这样:
app.config(...
window.on('scroll', function() {
// this is executed later
$injector.get()...
})
或者使用可用服务的app.run
。
答案 1 :(得分:0)
我想我几个月前遇到过类似的问题......我需要构建面包屑,但必须在config
阶段(ui-router
)创建。我这样做了(breadcrumbs-generation-service.provider.js
):
var somethingYouHaveToHaveLater = undefined;
function BreadcrumbsGenerationService () {
this.createStateData = createStateData;
function createStateData (arg) {
somethingYouHaveToHaveLater = arg;
};
}
function BreadcrumbsGenerationServiceProvider () {
this.$get = function BreadcrumbsGenerationServiceFactory () {
return new BreadcrumbsGenerationService();
}
}
angular
.module('ncAdminApp')
.provider('BreadcrumbsGenerationService', BreadcrumbsGenerationServiceProvider);
因为在Angular配置中使用了服务,所以需要注入提供程序以在配置阶段提供:Similar SO Question。尽管事实是注册为BreadcrumbsGenerationService
需要注入BreadcrumbsGenerationServiceProvider
到config
阶段,并与$get()
一起使用:
BreadcrumbsGenerationServiceProvider.$get().createStateData(someParams);
但是在控制器中,不使用Provider
后缀(BreadcrumbsGenerationServic
)注入它,它就像普通服务一样。