如何只过滤Ionic 2上对象的名称?

时间:2017-07-07 18:09:03

标签: angular ionic2 angular2-pipe

我遇到了问题。我有一个城市列表,但是当我使用搜索栏时,我只想要出现具有相同名称的城市。

目前我正在尝试这个:

   <ion-searchbar
      [(ngModel)]="selectedCity"
      [showCancelButton]="shouldShowCancel"
      (ionCancel)="onCancel($event)">
    </ion-searchbar>

  <ion-item *ngFor="let city of cities | orderBy: name | filter: selectedCity">
          <ion-label>{{city.name}}</ion-label>
    <button (click)="onActive(city.detalhe.id)" *ngIf="city.active" ion-button outline item-right>Desativar</button>
    <button (click)="onActive(city.detalhe.id)" *ngIf="!city.active" ion-button outline item-right>Ativar</button>
        </ion-item>

但我知道它永远不会起作用'因为我将对象城市发送到管道'过滤器'而不是名称,我怎样才能发送管道的名称?我需要方法'onActive'的对象

管道:

@Pipe({
name: "filter",
pure: false
})

export class FilterArrayPipe implements PipeTransform {

transform(items: Array<any>, conditions: {[field: string]: any}): Array<any> {
    return items.filter(item => {
        for (let field in conditions) {
            if (item[field] !== conditions[field]) {
                return false;
            }
        }
        return true;
    });
}
}

'selectedCity'是一个字符串。当我尝试用其他字符串输出管道时,它可以工作。另一点,我需要过滤比较对象的名称,但在此之后我需要整个对象。

1 个答案:

答案 0 :(得分:1)

首先,看起来您需要将2 parameters发送到过滤器。第一个是文字'名称',第二个选择的城市未引用* ngFor of&lt; ion-item&gt;。 然后你可以按项目[字段]过滤!== selectedCity - 其中字段将包含'name'

我认为你从here

获得了orderBy示例

您确实在下面的示例链接中看到了以下评论...避免使用管道进行orderby ..在组件中执行此操作。我会亲自在组件级别上解决这两个问题。