如何使用选择快照?

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 选择器是否有可能获得未定义的状态。您应该考虑选择器函数中的未定义状态吗?

以上是关于如何使用选择快照?的主要内容,如果未能解决你的问题,请参考以下文章

如何从地点选择器活动中检索地图快照?

创建Azure磁盘快照

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?

如何从谷歌玩游戏中选择和加载保存的游戏快照

如何同步两个mysql数据库中所有的表

如何给ubuntu扩大存储?