带有搜索自定义管道的异步管道

波城

我有一个可观察的数据源,因为我从我的 API 接收数据。我想按文本搜索数据并过滤它:

在这里,我有我的 Pipe.ts:

@Pipe({
  name: 'filterText'
})
export class FilterTextPipe implements PipeTransform {

  transform(values, searchTerm): any {

      if (!values || !searchTerm) {
          return _.get(values, '_value', '');
      }

      return values._value.filter( item =>
         item.provider_business_name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1
      );

  }

}

在这里我有我的模板:

<mat-card class="card-provider m-2 p-2" *ngFor="let provider of obs | filterText:searchText | async" />

这里也是我的 component.ts:

@ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
    dataSource;
    searchText;
    obs: Observable<any>;

    constructor(
        private _providersService: ProvidersService,
        private dialog: MatDialog,
        private changeDetectorRef: ChangeDetectorRef
    ) { }

    ngOnInit() {
        this.changeDetectorRef.detectChanges();
        this.getProviders();
    }

    getProviders() {
        this._providersService.getAllProviders().subscribe(
            data => {
                this.dataSource = new MatTableDataSource(data);
                this.dataSource.paginator = this.paginator;
                this.obs = this.dataSource.connect();
            }
        );
    }

我这样做是因为我需要对卡片元素进行分页,但我无法将分页器和 FilterPipe 两者结合起来。

太感谢了!

波城

Nvm 我找到了一个解决方案,我不知道它是否是最“干净”的方式,但它有效!

我在我的管道中删除了我的观察者的属性调用:

管道.ts:

 @Pipe({
      name: 'filterText'
    })
    export class FilterTextPipe implements PipeTransform {

      transform(values, searchTerm): any {

          if (!searchTerm) {
              return values;
          }

          return values.filter( item =>
             item.provider_business_name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1
          );

      }

    }

我的模板如下所示:

<mat-card class="card-provider m-2 p-2" *ngFor="let provider of obs | async | filterText:searchText" >

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章