如何过滤ngrx中的实体?

How to filter entities in ngrx?

我创建了一个 ngrx 实体服务:

@Injectable({ providedIn: 'root' })
export class ProductsDataService extends EntityCollectionServiceBase<{ id, name, isActive }> {
  actives$ = this.entities$.pipe(filter(e => e.isActive); <------ but e is an Array!

我想按 isActive === true.

筛选

但是我得到的问题是 e 作为数组..所以我不能做过滤。

我可以 .pipe(map(e => e.filter(ee => ee.isActive))) 但是这个解决方案感觉不对,因为它在一个方法中需要两个操作 (map)。

知道如何通过 ngrx/rxjs 方式做到这一点吗?

您的地图功能是正确的做法:

 this.entities$.pipe(map(e => e.filter(...));

Filter是用来过滤数据流而不是过滤数据本身,即Emit满足提供条件的值(参考:learnrxjs.io/learn-rxjs/operators/filtering/filter)。换句话说,决定数据流是否只适用于特定条件。

一个简单的例子:

x.pipe(filter(num => num === 2)).subscribe(val => console.log(val))

只有当 2 从 x 发出时才会打印。