我正在使用RXJS 6.3.3。
我有以下代码应该过滤掉已选择的小控件。
所以,如果我有
Gizmos = "Red", "Blue", "Green"
用户选择“蓝色”。
我应该只将“红色”和“绿色”作为可用选项。
但是我仍然看到“红色”,“蓝色”,“绿色”。
在调试中,似乎过滤器正在运行,将打印示例:
Red:true Blue:false Green:true
我不确定我缺少什么,因为UI仍显示所有3个值。
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="selected($event)">
<mat-option *ngFor="let gizmp of filterGizmos | async" [value]="gizmo.value" (onSelectionChange)="gizmoSelectionChange(gizmo)">
{{gizmo.value}}
</mat-option>
</mat-autocomplete>
filterGizmos: Observable<Gizmo[]>;
this.filterGizmos = this.filterGizmoData(this.searchTerm.value);
filterGizmoData(searchString?: string): Observable<Gizmo[]> {
let tfp = new GizmoFindParameters();
if (searchString == undefined) {
tfp.value = "";
} else {
tfp.value = searchString.trim();
}
return this.gizmoService.find<Gizmo[]>(tfp)
.pipe(tap(x =>
x.filter((y) => {
console.log(y.value);
console.log(!this.selectedGizmos.includes(y.value));
return !this.selectedGizmos.includes(y.value);
})
)
);
};
答案 0 :(得分:2)
tap
不会修改流。它通常用于调试和副作用(不影响流的操作)。
改为使用map
。
这来自tap
的文档:
对源上的每个发射都产生副作用。 返回与源相同的Observable。