在APP_INITIALIZER启动服务之前访问路由参数值 - angular2

时间:2018-01-17 17:30:30

标签: javascript angular

如果我正在使用启动服务来检查某些业务规则(通过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变量始终未定义。

  

如何更改此选项以将路由参数值注入启动   服务超过存储服务(或任何其他方式)?

1 个答案:

答案 0 :(得分:0)

在startupServiceFactory中,我会直接使用window.location,解析queryparam,并保存值(全部在startupServiceFactory中),然后在下游你可以使用更“纯”的角度代码