【发布时间】:2019-04-10 08:53:42
【问题描述】:
我使用 Angular 6,我想过滤异步管道的结果,然后在 UI 中呈现它们。
这是我现在的代码
this.results = this.form.get('name').valueChanges.pipe(
filter(formdata => formdata.name.length > 0),
switchMap( formdata => this.service.getNames(formdata.name))
);
和模板
<div *ngIf='results | async ; let items'>
<div *ngFor='let item of items'>{{item.id}} {{item.name}} </div>
</div>
从管道中我得到了一些 id 和名称。我已经有一个 id 数组。我想过滤管道的 id,而不是渲染已经在数组中的那些。
所以,这就是我尝试做的。
array = [{id:1,name:'one'},{id:2,name:'two'}];//I already have this
管道中的新版本过滤器
this.results = this.form.get('name').valueChanges.pipe(
filter(formdata => formdata.name.length > 0),
switchMap( formdata => this.service.getNames(formdata.name)) ,
filter(checkIfResultIdInArray())//pseudocode
);
假设checkIfResultIdInArray 是我创建的函数。过滤并返回所有不在array 中的id。所以最终出现在模板中的 ids/names 不是{id:1,name:'one'},{id:2,name:'two'}。
或者我可以以某种方式过滤模板?
【问题讨论】:
-
不要使用
Observable过滤函数,而应该使用map和数组.filter函数来代替 -
rxjs
filter检查是否必须传播事件。 arrayfilter过滤数组(你想要的)。 rxjsmap将传播新值(您想传播新的过滤数组)。所以就像 user184994 说的,对 rxjs 映射做一个数组过滤。 learnrxjs.io/operators/transformation/map.html
标签: angular filter rxjs rxjs-pipeable-operators