我有一个这样定义的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
});
自从我在这里打电话订阅后,如何退订?是否有办法做到这一点而不必致电订阅?
[NgRx就像是RxJS的包装,因此所有Rxjs运算符都可以与NgRx一起顺利使用]
如果您不调用单个外部API,而是调用多个外部API,那就没关系,只是不要忘记使用take(1)
运算符,否则每次selectRows
更新时都会调用订阅。但如果您还想返回,则返回switchMap
return this.store.pipe(select(fromSelectors.selectedRows),take(1))
.pipe(swichMap(()=>//your API call)