清除部分状态

时间:2019-01-19 12:34:56

标签: angular state-management ngxs

对于为清除部分状态而想出的解决方案,我有些怀疑。

我有一个名为“书”的页面,在这里我可以得到一堆书。每个书对象都包含该页面所需的最少信息。当用户单击一本书时,他们将被重定向到一个书页面,我将在其中获取完整的书信息。

我的状态如下:

@State<any>({
  name: 'books',
  defaults: {
    books: [],
    selectedBook: null
  }
})

当用户离开单个书页时,我想清除selectedBook,因为(至少对我来说)进入应用程序的其他部分感觉很奇怪,但仍然有一个{{ 1}}。

我想知道如何实现这一目标,而我能想到的最佳解决方案是在selectedBook路线上从ClearSelectedBook后卫派遣一个CanDeactivate行动。

这里是demo on StackBlitz

这是正确的方法吗?如果没有,还有其他替代方法吗?

1 个答案:

答案 0 :(得分:1)

不确定是否有正确的方法,但是另一种方法是使用NGXS Router Plugin

状态可以处理RouterNavigation动作,并查看动作有效负载-如果它已经离开单个书页,则清除该状态中的selectedBook值。

已经说过-您使用显式动作的方法有其优点(恕我直言)-不过,我可以将其重命名,也许重命名为UserLeftBookPage ..然后让状态对此做出响应。而不是指示响应的操作名称。使用显式操作而不是使用路由器,编写测试也更加简单。