我正在尝试根据姓氏过滤对象数组。
filterItems(searchTerm) {
return this.EmpData.filter(emp => {
return emp.lastName.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1 || driver.firstName.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
});
}
和html模板中
<ion-list *ngIf="showEmpList">
<ion-item *ngFor="let item of EmpData" button (click)="selectEmp(item.lastName)">
<ion-label>{{item.lastName}}, {{item.middle}}, {{item.firstName}}</ion-label>
</ion-item>
</ion-list>
这在我在搜索框中输入名称但在从名称中删除字符时,结果不会刷新新数据,这是可行的。例如-我有数据=[{name:'Amir','age':28},{name:'AAmir', age:26},{name:'AAAmir', age:30}]
现在,如果我在搜索框中输入AA,它将显示最后两个结果,如果我输入AAA,则如果我从输入字段中删除两个或更多字符,假设新输入为A,则现在仅显示最后一个emp数据,结果显示为仅最后一个雇员数据
请帮助。提前感谢
可能是您过滤的数组指向与原始数组相同的数组,这就是您要更改原始数组的原因。我已经为相同的代码做了一些:-
Stackblitz URL:-https://stackblitz.com/edit/ionic-gqingy
HTML:-
<input type="text" [(ngModel)]="filterText" (ngModelChange)="filterValues()"/>
<ion-list>
<ion-item *ngFor="let item of filteredData" button (click)="selectEmp(item.lastName)">
<ion-label>{{item.name}}, {{item.age}}</ion-label>
</ion-item>
</ion-list>
TS:-
import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { TabsPage } from '../pages/tabs/tabs';
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage:any = TabsPage;
EmpData = [{name:'Amir',age:28},{name:'AAmir', age:26},{name:'AAAmir', age:30}];
filteredData = [{name:'Amir',age:28},{name:'AAmir', age:26},{name:'AAAmir', age:30}];
public filterText: string = '';
constructor(platform: Platform) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
});
}
public filterValues() {
this.filteredData = this.EmpData.filter((data) => data.name.toLowerCase().includes(this.filterText? this.filterText.toLowerCase():''));
}
}