当引导我的Angular 2(v2.4)时,我试图运行一个在应用程序加载之前自动授权用户的函数。但是,这似乎不起作用。
import {platformBrowserDynamic} from "@angular/platform-browser-dynamic";
import {enableProdMode, APP_INITIALIZER} from "@angular/core";
import {Http, HttpModule} from "@angular/http";
import {PARAMETERS} from "../config/parameters";
import {AppModule} from "./AppModule";
import {UserRepository} from "../modules/service/repository/UserRepository";
import {SessionManager} from "../modules/service/manager/SessionManager";
export function auth(userRepository: UserRepository) {
console.log("BOOM!");
return () => userRepository.autoAuthorize();
};
platformBrowserDynamic().bootstrapModule(AppModule, [
{
provide: APP_INITIALIZER,
useFactory: auth,
deps: [UserRepository, SessionManager, HttpModule],
multi: true
}
])
.catch(err => console.error(err));
我做错了什么,我怎么能让它发挥作用?另外,如果我有上述代码,是否需要将这些服务添加到AppModule中的providers数组中?
非常感谢
JT
答案 0 :(得分:1)
将其所依赖的服务添加到您已有的提供商列表中。
...
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [ UserRepository, SessionManager, HttpModule,
{
provide: APP_INITIALIZER,
useFactory: auth,
deps: [UserRepository, SessionManager, HttpModule],
multi: true
}
]});
...
https://github.com/angular/angular/blob/4.0.0/packages/core/src/linker/compiler.ts#L90-L109
对于编译器选项,您提供了一个包含提供程序的对象。现在应该编译它,了解你想要用于工厂的类。
作为注释,您也可以在其提供程序列表中的appmodule中执行此操作,而不是在引导程序编译器选项上执行此操作