【问题标题】:Searchbar with filter from JSON data with Ionic 3带有 Ionic 3 的 JSON 数据过滤器的搜索栏
【发布时间】:2023-03-31 02:11:01
【问题描述】:

我想要一个搜索栏,根据书名过滤结果,我尝试过,但没有成功。当我在寻找东西时,什么都没有发生,没有错误,所以我错了,但我不知道是什么,我是打字稿的新手,我寻求帮助。提前致谢

这是我的page.html

<ion-content padding>
    <ion-searchbar placeholder="Filter Items" (ionInput)="getItems($event)"></ion-searchbar>
    <ion-grid>
        <ion-row>
            <ion-col *ngFor="let item of items">
                <ion-card-header><h1>{{item.title}}</h1></ion-card-header>
                <ion-card-header><h3>Autore:{{item.author}}</h3></ion-card-header>
                <div id="immagine">
                    <img src="../assets/{{item.imageLink}}">
                </div>
            </ion-col>
        </ion-row>
    </ion-grid>   
</ion-content> 

这是我的page.ts 文件:

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable'
import 'rxjs/add/operator/map';

@IonicPage()
@Component({
  selector: 'page-tab2',
  templateUrl: 'tab2.html',
})
export class Tab2Page {
 items:any;


  constructor(public navCtrl: NavController, public navParams: NavParams, public http: HttpClient) {
this.loadData();

  }

  loadData(){
    let data:Observable<any>;
    data = this.http.get("assets/books.json");
    data.subscribe(result => {
      this.items = result;
      this.initiazileItems();
    })

   }

 initiazileItems(){
   this.items= this.items;
 }

 getItems(ev:any){
   this.initiazileItems();
   let val = ev.target.value;
 }

 filterItems(ev: any) {
    this.loadData();
    let val = ev.target.value;
    if (val && val.trim() != '') {
      this.items = this.items.filter((item) => {
        return (item.title.toLowerCase().indexOf(val.toLowerCase()) > -1);
      })
    }
  }
}

我的 json 示例:

{
    "author": "Hans Christian Andersen",
    "country": "Denmark",
    "imageLink": "images/fairy-tales.jpg",
    "language": "Danish",
    "link": "https://en.wikipedia.org/wiki/Fairy_Tales_Told_for_Children._First_Collection.\n",
    "pages": 784,
    "title": "Fairy tales",
    "year": 1836
},

【问题讨论】:

    标签: javascript typescript ionic-framework ionic2 ionic3


    【解决方案1】:

    将搜索栏改为如下

      <ion-searchbar placeholder="Filter Items" [(ngModel)]="searchTerm" (ionInput)="filterItems()"></ion-searchbar>
    <ion-grid>
            <ion-row>
                <ion-col *ngFor="let item of filterItems">
                    <ion-card-header><h1>{{item.title}}</h1></ion-card-header>
                    <ion-card-header><h3>Autore:{{item.author}}</h3></ion-card-header>
                    <div id="immagine">
                        <img src="../assets/{{item.imageLink}}">
                    </div>
                </ion-col>
            </ion-row>
        </ion-grid>   
    

    然后在你的 ts 文件中添加:

        searchTerm: string ;
        filterItems:any;
     loadData(){
        let data:Observable<any>;
        data = this.http.get("assets/books.json");
        data.subscribe(result => {
          this.items = result;
          this.filterItems= this.items;
        })
    
        filterItems(){
        this.filterItems = this.items.filter(item =>  item.title.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1;
         )
        }
    

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2018-11-10
      • 1970-01-01
      • 2015-12-14
      • 2021-04-13
      相关资源
      最近更新 更多