Ionic 2:按名称过滤异步列表的管道 属性
Ionic 2: Pipe to filter async list by name property
问)我下面的syntax/code有什么问题?
我想按名称 属性 过滤我的项目列表。我尝试使用下面的代码,但出现错误:
无法读取未定义的 属性'toLowerCase'
注意:查询在页面加载时定义为空字符串,即
var query = "";
我的模板:
<ion-card *ngFor="#item of (items | clientNameFilter:query)">
<img [src]="getItemImage(item)" (click)="editItem(item)"/>
<ion-card-content (click)="editItem(item)">
<h2 class="card-title">{{item.name}}</h2>
<p>{{item.address.name}}</p>
<p>{{item.address.addressLine1}}</p>
<p>{{item.address.town}}</p>
<p>{{item.address.postcode}}</p>
</ion-card-content>
</ion-card>
我的过滤器:
import {Pipe, PipeTransform} from 'angular2/core';
import {Client} from '../interfaces/client';
@Pipe({
name: 'clientNameFilter',
pure: false
})
export class ClientNameFilterPipe implements PipeTransform {
transform(query: string, clients: Client[]) {
return clients.filter(client =>
client.name.toLowerCase().indexOf(query) > -1
);
}
}
参数顺序不正确,第二个参数必须是数组:
@Pipe({
name: 'clientNameFilter'
})
export class ClientNameFilterPipe implements PipeTransform {
transform(clients: Client[], params: string[]) {
let query = params[0];
return clients.filter(client =>
client.name.toLowerCase().indexOf(query) > -1
);
}
}
第一个参数是您希望应用管道的值/列表,第二个参数是您的参数。
有关详细信息,请参阅此文档:
这是我的工作版本(用于联系人):
import { PipeTransform, Pipe } from '@angular/core';
@Pipe({
name: 'contactNameFilter'
})
export class ContactNameFilterPipe implements PipeTransform {
transform(contacts: Array<any>, searchTerm: string) : Array<any> {
if (contacts == null) {
return [];
}
if (searchTerm == null) {
return contacts;
}
return contacts.filter( contact => {
return `${contact.firstName} ${contact.lastName}`.toLowerCase().indexOf(searchTerm) > -1;
});
}
}
和用法:
<ion-item *ngFor="let contact of (contacts | async | contactNameFilter:searchTerm)">
问)我下面的syntax/code有什么问题?
我想按名称 属性 过滤我的项目列表。我尝试使用下面的代码,但出现错误:
无法读取未定义的 属性'toLowerCase'
注意:查询在页面加载时定义为空字符串,即
var query = "";
我的模板:
<ion-card *ngFor="#item of (items | clientNameFilter:query)">
<img [src]="getItemImage(item)" (click)="editItem(item)"/>
<ion-card-content (click)="editItem(item)">
<h2 class="card-title">{{item.name}}</h2>
<p>{{item.address.name}}</p>
<p>{{item.address.addressLine1}}</p>
<p>{{item.address.town}}</p>
<p>{{item.address.postcode}}</p>
</ion-card-content>
</ion-card>
我的过滤器:
import {Pipe, PipeTransform} from 'angular2/core';
import {Client} from '../interfaces/client';
@Pipe({
name: 'clientNameFilter',
pure: false
})
export class ClientNameFilterPipe implements PipeTransform {
transform(query: string, clients: Client[]) {
return clients.filter(client =>
client.name.toLowerCase().indexOf(query) > -1
);
}
}
参数顺序不正确,第二个参数必须是数组:
@Pipe({
name: 'clientNameFilter'
})
export class ClientNameFilterPipe implements PipeTransform {
transform(clients: Client[], params: string[]) {
let query = params[0];
return clients.filter(client =>
client.name.toLowerCase().indexOf(query) > -1
);
}
}
第一个参数是您希望应用管道的值/列表,第二个参数是您的参数。
有关详细信息,请参阅此文档:
这是我的工作版本(用于联系人):
import { PipeTransform, Pipe } from '@angular/core';
@Pipe({
name: 'contactNameFilter'
})
export class ContactNameFilterPipe implements PipeTransform {
transform(contacts: Array<any>, searchTerm: string) : Array<any> {
if (contacts == null) {
return [];
}
if (searchTerm == null) {
return contacts;
}
return contacts.filter( contact => {
return `${contact.firstName} ${contact.lastName}`.toLowerCase().indexOf(searchTerm) > -1;
});
}
}
和用法:
<ion-item *ngFor="let contact of (contacts | async | contactNameFilter:searchTerm)">