在角度服务中使用选择器从NgRx存储读取的正确方法是什么,并使用该值调用另一个函数?

问题描述 投票:0回答:1

我有一个这样定义的NgRx选择器

selectedRows = createSelector(
    someState,
    state => state[fromDataSource.someSliceKey].selectedRows);

[只要在组件(UI)上选择了某些项目,selectedRows就会更新为最新选择的项目。现在,另一个组件上还有一个按钮,该按钮调用角度服务以执行某些操作,最终调用一堆外部API。我想使用角度服务上的上述定义的选择器读取selectedRows中存储的值,并进行这些API调用。

正确的方法是什么?

我正在考虑的一种方法是订阅选择器,如下所示:

const selectedRows$ = this.store.pipe(
  select(fromSelectors.selectedRows)
  ).subscribe(data => {
  // call other functions and dispatch actions to call external API
});

自从我在这里打电话订阅后,如何退订?是否有办法做到这一点而不必致电订阅?

angular rxjs ngrx
1个回答
0
投票

[NgRx就像是RxJS的包装,因此所有Rxjs运算符都可以与NgRx一起顺利使用]

如果您不调用单个外部API,而是调用多个外部API,那就没关系,只是不要忘记使用take(1)运算符,否则每次selectRows更新时都会调用订阅。但如果您还想返回,则返回switchMap

    return this.store.pipe(select(fromSelectors.selectedRows),take(1))
.pipe(swichMap(()=>//your API call)
© www.soinside.com 2019 - 2024. All rights reserved.