(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