2017-07-04 80 views
0

我下面这个教程: https://www.joshmorony.com/high-performance-list-filtering-in-ionic-2/离子2列表中未过滤

这是我search.html

<ion-header> 
    <ion-navbar> 
     <ion-title>search</ion-title> 
    </ion-navbar> 
    <ion-toolbar primary > 
     <ion-searchbar [(ngModel)]="searchTerm" [formControl]="searchControl" ></ion-searchbar> 
    </ion-toolbar> 
</ion-header> 

<ion-content padding> 
     <ion-list> 
      <ion-item *ngFor="let item of items" > 
       {{ item.name}} 
      </ion-item> 
     </ion-list> 
</ion-content> 

,这是我search.js

mport { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams,ViewController } from 'ionic-angular'; 
import { DataListProvider } from '../../../providers/data-list/data-list'; 
import { KeysPipe } from '../../../providers/pipes/pipes'; 
import 'rxjs/add/operator/debounceTime'; 
import { FormControl } from '@angular/forms'; 



@IonicPage() 
@Component({ 
    selector: 'page-country-list-modal', 
    templateUrl: 'country-list-modal.html', 
}) 
export class searchPage { 

    items=[] 
    items1=[] 

    searchTerm: string = ''; 
    searchControl: FormControl; 
    searching: any = false; 



    constructor(public navCtrl: NavController, public navParams: NavParams,public viewCtrl: ViewController, public dataListProvider : DataListProvider) { 
     this.searchControl = new FormControl(); 
    } 


    ngOnInit() { 
     console.log ('1234') 
     this.items1=JSON.parse(localStorage.getItem("countryList")) 

     for(let key in this.items1) { 
      if (key == "") 
      { 

      }else{ 
       this.items.push({ 'name': this.items1[key] }); 
      } 
     } 
    } 

    ionViewDidLoad() { 

     this.setFilteredItems(); 

     this.searchControl.valueChanges.debounceTime(700).subscribe(search => { 

      this.setFilteredItems(); 

     }); 
    } 


    setFilteredItems() 
    { 
     if (this.searchTerm) { 

      return this.items.filter(item => { 
       return item.name.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1; 
      }); 
     } else { 
      return this.items; 
     } 
    } 


} 

但问题它根本没有通过清单排序。如何解决这个问题

我的项目看起来像

[{ “Name”: “加拿大”},{ “名”: “日本”} ....]

回答

1

filter功能只是返回已过滤的数组,而不是修改原始数组。你需要做的是这样的:

filteredItems =[]; 
setFilteredItems() 
    { 
     if (this.searchTerm) { 

      this.filteredItems = this.items.filter(item => { 
       return item.name.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1; 
      }); 
     } else { 
      this.filteredItems = this.items; 
     } 
    } 

,并使用filteredItems到genarate项目模板

+0

谢谢,这个固定! – noor