我遇到了问题。我有一个城市列表,但是当我使用搜索栏时,我只想要出现具有相同名称的城市。
目前我正在尝试这个:
<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'是一个字符串。当我尝试用其他字符串输出管道时,它可以工作。另一点,我需要过滤比较对象的名称,但在此之后我需要整个对象。
答案 0 :(得分:1)
首先,看起来您需要将2 parameters发送到过滤器。第一个是文字'名称',第二个选择的城市未引用* ngFor of&lt; ion-item&gt;。 然后你可以按项目[字段]过滤!== selectedCity - 其中字段将包含'name'
我认为你从here
获得了orderBy示例您确实在下面的示例链接中看到了以下评论...避免使用管道进行orderby ..在组件中执行此操作。我会亲自在组件级别上解决这两个问题。