我使用从服务器加载数据的APP_INITIALIZER和带有CanActivate的保护程序。我使用角2.4.8,我看到在我的守护中的CanActivate在APP_INITIALIZER完成调用验证函数之前被调用.
这是正确的行为吗?
{ provide: APP_INITIALIZER, useFactory: (config: ContextService) => () => config.validate(), deps: [ContextService], multi: true }函数config.validate()返回一个承诺。这里的代码
validate() {
return Observable.forkJoin(
this.http.get('/api/v1/check').map(res => res.json()),
this.http.get('/api/v1/me').map(res => res.json())
).map(
data => {
console.log("data loaded");
... stuff ...
return this.hasValidLicence;
}).toPromise();
}谢谢
发布于 2017-03-01 13:39:43
那么,你的问题的答案是yes和no。版本2.4.8中的路由器已经更改,现在导航也在APP_INITIALIZER循环中启动,这意味着在ContextService工厂完成之前可能会触发CanActivate。路由(NavigationEnd)在所有APP_INITIALIZER任务完成之前不会被解析,但这可能不是您想要的。
如果希望在完成加载/导航到页面之前确保数据存在,则可以执行以下操作之一:
https://stackoverflow.com/questions/42533100
复制相似问题