扩展状态时,如何为共享选择器实现共享操作?

时间:2019-07-29 09:55:26

标签: angular ngxs

问题

当使用NGXS继承状态时,文档中有一种很棒的技术可以共享选择器。这非常有用,因为它意味着所有子状态的选择器仅定义一次。

我想对行动采取相同的方法,但是我无法弄清楚。我该如何处理,这样我就不必为每个继承的状态创建一组具体的操作?

到目前为止的想法

NGXS gitbook显示了它如何与继承的选择器一起工作: https://ngxs.gitbook.io/ngxs/v/master/concepts/select#inheriting-selectors

我尝试查看ngxs-entity插件,发现了一个名为generateActionObject()的函数:

https://github.com/ngxs-labs/entity-state/blob/master/src/lib/internal.ts

这听起来像是正确的方法,但是我看不到迷雾,无法弄清这是我要做的第一步。

我的情况

我正在Angular中实现一个通用的ListingModule,它定义了一个基态类ListingState。包含标准内容,例如当前页面,每页行数,排序选项等。

将使用通用列表模块的子模块每个都需要一个单独的存储区来包含其状态。

一个粗略的例子:

ListingChildStateA
{ 
  numberOfRows, 
  currentPage 
} 

ListingChildStateB
{ 
  numberOfRows, 
  currentPage 
} 

ListingChildStateC
{ 
  numberOfRows, 
  currentPage 
} 

我知道这是状态继承的良好用法。并根据NGXS文档使用共享选择器,我已经搞定了一半。

示例

我需要像这样实现 something

@Dispatch()
function setPage() {
   new generateAction(SetPage, 'ListingChildStateA');
}


class BaseListingState {
...
@Action(SetPage)
setPage(ctx: StateContext<BaseListingState>) {
  ...
}

因此,以这种方式分派操作将意味着将更改商店中名为ListingChildStateA的切片,而不会改变其他任何切片。

我知道这是错误的,但是我试图用它来描述我的意图。我敢肯定,由于ngxs-entity插件正在执行类似操作,因此必须有一种使操作更通用,可共享的方法。

下一步是什么?

有人可以通过共享选择器操作使用状态继承来帮助我实现最佳状态吗?

谢谢。

0 个答案:

没有答案