如何使用选择快照?
Posted
技术标签:
【中文标题】如何使用选择快照?【英文标题】:How to use selectSnapshot? 【发布时间】:2018-11-05 15:16:09 【问题描述】:我有一个守卫来检查状态是否存在令牌。
canActivate(): boolean
const token = this.store.selectSnapshot((state: AuthenticationState) => state.token);
if (!token)
return true;
this.router.navigate(['home']);
return false;
然后我有这样的事情:
export class AuthenticationState
@Selector()
static token(state: AuthenticationStateModel)
return state.token;
我得到一个错误。 “AuthenticationState”类型上不存在属性“token”
【问题讨论】:
【参考方案1】:您在这里犯的错误是您假设 lambda 的状态参数是您的 AuthenticationState
,它实际上是整个应用程序状态,它是 AuthenticationState
的父级。你应该像这样传递你的选择器:
canActivate(): boolean
const token = this.store.selectSnapshot(AuthenticationState.token);
if (!token)
return true;
this.router.navigate(['home']);
return false;
其实前几天NGXS的作者就这个话题发过一篇文章: https://medium.com/@amcdnl/authentication-in-ngxs-6f25c52fd385
【讨论】:
AuthenticationState.token
选择器是否有可能获得未定义的状态。您应该考虑选择器函数中的未定义状态吗?以上是关于如何使用选择快照?的主要内容,如果未能解决你的问题,请参考以下文章