如何过滤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 发出时才会打印。
我创建了一个 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 发出时才会打印。