如果我正在使用启动服务来检查某些业务规则(通过Web服务检索) 根据该信息,我授予或拒绝访问该应用程序
app.module 启动服务中的注册如下 ...
const APP_PROVIDERS = [
AppState,
GlobalState
];
export function startupServiceFactory(startupService: StartupService): Function {
return () => startupService.load();
}
@NgModule({
bootstrap: [App],
declarations: [
App
],
imports: [
...
]
providers: [
DataService,
StartupService,
APP_PROVIDERS,
{
// Provider for APP_INITIALIZER
provide: APP_INITIALIZER,
useFactory: startupServiceFactory,
deps: [StartupService],
multi: true
}
],
})
export class AppModule {
constructor(public appState: AppState) { }
}
现在我想进一步扩展这个。我想在输入启动服务之前获取路由参数值, 并将此参数值传递给启动服务。
所以我试着跟着,
app.routing.ts
export const routes: Routes = [
{ path: 'myapp/:name', component: AppComponent }
];
在 AppComponent 中我尝试在init
上获取此内容ngOnInit() {
let name = this.route.snapshot.params["name"];
storageService.save('nameValue', name);
}
startupService.ts
export class StartupService{
private name: string;
constructor(private storage: StorageService){
this.name = storage.get(nameValue);
}
// using this.name further ...
}
这不起作用,因为在AppComponent之前加载了startupService,因此 startupService中的name变量始终未定义。
如何更改此选项以将路由参数值注入启动 服务超过存储服务(或任何其他方式)?
答案 0 :(得分:0)
在startupServiceFactory中,我会直接使用window.location,解析queryparam,并保存值(全部在startupServiceFactory中),然后在下游你可以使用更“纯”的角度代码