目前我的解决方案非常简单:
export class UserResolve implements Resolve<any>{
constructor(private userService: UserService){}
resolve(route: ActivatedRouteSnapshot){
return this.userService.get(route.params.id);
}
}
在组件中,然后将用户加载到商店中。我想知道的是如何在不必订阅select
函数返回的Observable的情况下获得该用户。原因是,如果我再次导航到同一个网址,而不是发送另一个请求以获取用户信息,我只是简单地从商店返回用户。
基本上,我想到的是这样的事情:
this.store.select(state => state.user)
.take(1)
.subscribe(user =>
user.id == +route.paramMap.get('id') ? user : this.userService.get(route.params.id))
但是我知道这不能完成,因为你无法在订阅功能中返回任何内容。有可能是其他方式吗?
我知道这可以在组件中实现,但我需要在组件初始化之前在Resolve中完成。
我正在使用Angular 5和ngrx / store 4
答案 0 :(得分:0)
路线防护的最常见用法是你提到的,但是当你需要做某事时,你可以做一个守卫的事情。在路由被路由之前#39;看看this post:如果用户存在于商店中,用户会在canActivate内部检查警卫