(ngrx / store)如何在没有订阅的情况下获取当前状态,以便在路由Resolve中使用?

时间:2017-11-17 16:34:36

标签: angular ngrx-store angular5

目前我的解决方案非常简单:

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

1 个答案:

答案 0 :(得分:0)

路线防护的最常见用法是你提到的,但是当你需要做某事时,你可以做一个守卫的事情。在路由被路由之前#39;看看this post:如果用户存在于商店中,用户会在canActivate内部检查警卫