首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TS中使用Custom_Pipe

在TS中使用Custom_Pipe
EN

Stack Overflow用户
提问于 2019-11-23 18:25:46
回答 2查看 129关注 0票数 1

我有个管子:

代码语言:javascript
复制
@Pipe({
name: 'searchNomES'
})
export class SearchNomESPipe implements PipeTransform {

transform(uos: IUo[], name?: string,): IUo[] {

if (!uos) return [];
if (!name) return uos;
name = name.toLocaleLowerCase();
uos = [...uos.filter(uo => uo.nom.toLocaleLowerCase().includes(name))];
   return uos;

}
}

当我像这样使用html中的管道时,它工作得很好:

代码语言:javascript
复制
<ng-container *cdkVirtualFor="let image of display | async | searchNomES : name " >
</ng-container> 

但我试着在我的component.ts中使用管道。我试试看:

代码语言:javascript
复制
<mat-form-field >
<input matInput  
(keyup)="applyFilter2($event.target.value)">    
</mat-form-field>

import { SearchNomESPipe } from '../../search-nomES.pipe';

constructor(private  espipe:  SearchNomESPipe) { }

ngOnInit() {this.display=this.markerservice.getGeos() }

applyFilter2(name : string) {
this.display = this.espipe.transform(this.display,name);
}

我的服务:

代码语言:javascript
复制
getGeos() { return this. 
database.list('ES').snapshotChanges().pipe(map(actions => {
return actions.map(a => {
const data = a.payload.val();
const key = a.payload.key;
return {key, ...data };

但我有个错误:

uos.filter不是一个函数,或者它的返回值不可迭代。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-23 20:25:38

你正在与一个可观察的人一起工作,因此你的管道必须处理一个可观察的,并返回一个可观察的。然后,您将在视图中使用async管道。修改您的烟斗以:

代码语言:javascript
复制
transform(uos: Observable<IUo[]>, name?: string): Observable<IUo[]> {
  return uos.pipe(
    map(data => {
      if (!data || !name) return [];
      name = name.toLocaleLowerCase();
      return data.filter(uo => uo.title.toLocaleLowerCase().includes(name));
    })
  );
}

然后模板:

代码语言:javascript
复制
<ng-container *cdkVirtualFor="let image of filtered | async" >

TS:

代码语言:javascript
复制
display: Observable<IUo[]>;
filtered: Observable<IUo[]>;

ngOnInit() {
  this.display=this.markerservice.getGeos() 
}

applyFilter2(name : string) {
   this.filtered = this.espipe.transform(this.display,name);
}

演示

票数 1
EN

Stack Overflow用户

发布于 2019-11-23 18:34:27

就像这样:

代码语言:javascript
复制
 ngOnInit() {
    this.markerservice.getGeos().subscribe(resp: any[] => {
      this.display = this.espipe.transform(resp, name)
    })
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59010837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档