(ngrx/store) 如何在不订阅的情况下获取当前状态,以便在路由 Resolve 中使用?
(ngrx/store) How can I get the current state without subscribing, for use in a route Resolve?
目前我有很简单的解析:
export class UserResolve implements Resolve<any>{
constructor(private userService: UserService){}
resolve(route: ActivatedRouteSnapshot){
return this.userService.get(route.params.id);
}
}
在组件中,用户随后被加载到商店中。我想知道的是如何在不必订阅由 select
函数编辑的 Observable return 的情况下获得该用户。原因是,如果我再次导航到同一个 url,而不是发送另一个请求来获取用户信息,我宁愿简单地 return 商店中的用户。
基本上,我的想法是这样的:
this.store.select(state => state.user)
.take(1)
.subscribe(user =>
user.id == +route.paramMap.get('id') ? user : this.userService.get(route.params.id))
但我知道这无法完成,因为您不能 return 订阅功能中的任何内容。有没有其他办法呢?
我知道这可以在组件中实现,但我需要在初始化组件之前在 Resolve 中完成它。
我正在使用 Angular 5 和 ngrx/store 4
路由守卫最常见的用法是您提到的,但是当您需要在路由 'routed' 之前执行 'something' 时,您可以在守卫中做任何事情。看一下this post:用户在守卫中打勾,在canActivate里面,是否存在用户在store
目前我有很简单的解析:
export class UserResolve implements Resolve<any>{
constructor(private userService: UserService){}
resolve(route: ActivatedRouteSnapshot){
return this.userService.get(route.params.id);
}
}
在组件中,用户随后被加载到商店中。我想知道的是如何在不必订阅由 select
函数编辑的 Observable return 的情况下获得该用户。原因是,如果我再次导航到同一个 url,而不是发送另一个请求来获取用户信息,我宁愿简单地 return 商店中的用户。
基本上,我的想法是这样的:
this.store.select(state => state.user)
.take(1)
.subscribe(user =>
user.id == +route.paramMap.get('id') ? user : this.userService.get(route.params.id))
但我知道这无法完成,因为您不能 return 订阅功能中的任何内容。有没有其他办法呢?
我知道这可以在组件中实现,但我需要在初始化组件之前在 Resolve 中完成它。
我正在使用 Angular 5 和 ngrx/store 4
路由守卫最常见的用法是您提到的,但是当您需要在路由 'routed' 之前执行 'something' 时,您可以在守卫中做任何事情。看一下this post:用户在守卫中打勾,在canActivate里面,是否存在用户在store