RXJS-过滤器似乎正在过滤,但结果仍显示为未过滤

时间:2018-12-13 15:22:48

标签: angular rxjs angular-material

我正在使用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);
        })
      )
      );
  };

1 个答案:

答案 0 :(得分:2)

tap不会修改流。它通常用于调试和副作用(不影响流的操作)。

改为使用map

这来自tap的文档:

  

对源上的每个发射都产生副作用。   返回与源相同的Observable。