【问题标题】:single searchbar filter items in multiple tabs in ionic 2ionic 2中多个选项卡中的单个搜索栏过滤项目
【发布时间】:2017-11-14 16:51:56
【问题描述】:

我试图在 ionic 2 的 2 个不同选项卡中使用单个搜索栏过滤器列表。我有搜索栏,并且我有一种过滤对象的方法,但我希望能够为用户提供不同的选项卡选择他们想要搜索的内容。例子.. “搜索页面”中有离子搜索栏和离子标签,有 2 个标签(人物和博客)。当用户在搜索栏中输入内容时,它将过滤活动选项卡中的结果。因此,当您第一次进入搜索页面时,它会默认为人员,但随后您可以单击博客选项卡切换到搜索博客。我想在主搜索页面中有一个搜索栏。

这是我目前拥有的..

搜索页面 html...

<ion-header text-center>
  <ion-navbar>
    <ion-title>Search Page</ion-title>
  </ion-navbar>
<ion-header>

<ion-searchbar [(ngModel)]="searchTerm" [formControl]="searchControl" (ionInput)="onSearchInput()"></ion-searchbar>
<div *ngIf="searching" class="spinner-container">
  <ion-spinner></ion-spinner>
</div>

<ion-tabs tabsPlacement="top">
  <ion-tab tabIcon="people" [root]="peopleSearch"></ion-tab>
  <ion-tab tabIcon="pricetags" [root]="postsSearch"></ion-tab>
</ion-tabs>

这样我在主要位置就有了搜索栏,因此在选项卡之间切换时不必刷新或重绘。不过,我不知道如何访问它及其价值,以及两个标签页上的 ionInput 事件。我似乎只能在主页上使用它。

我可以发布我迄今为止拥有的所有 TS 代码,用于过滤项目等,我都从教程 Here 我在想@ViewChild 的一些东西,但我在 ionic 方面还不够好,无法弄清楚如何在两个选项卡页面上获得它,并让所有事件和一切都自动在两个选项卡页面上运行。谢谢。

【问题讨论】:

    标签: javascript angularjs typescript ionic2 filtering


    【解决方案1】:

    我将介绍两种方法,一种非常简单,一种更正确。

    1) navCtrl.parent.getActive().instance.searchTerm

    当前导航的父导航是选项卡。它的视图控制器是 getActive() ,实例是类的实际实例,所以你有数据。

    this.tabsInstance = navCtrl.parent.getActive().instance;
    
    data | filter: searchTerm
    

    2) 第二种选择是使用 EventEmitters。我认为这是最干净的方式,并且类之间有更多的分离。

    在标签类中创建一个EventEmitter

    public searchEmitter: EventEmitter<string> = new EventEmitter<string>();
    

    把它放在你的根参数上

      <ion-tab [rootParams]="searchEmitter" tabIcon="people" [root]="peopleSearch"></ion-tab>
      <ion-tab [rootParams]="searchEmitter" tabIcon="pricetags" [root]="postsSearch"></ion-tab>
    

    在每个类中获取 navParams 并将其分配给 searchTerm。

    public searchTerm:string;
    
    constructor(navParams:NavParams){
          if(navParams)
          navParams.data.subscribe(searchTerm => this.searchTerm = searchTerm);
    }
    

    当 searchInput 发生变化时,在选项卡中发出变化

    this.searchEmitter.emit(this.searchTerm);
    

    第二个答案可能更长,但肯定更正确。

    【讨论】:

    • 天哪,这绝对是美丽的!太感谢了!一个简单的问题,EventEmitter 我的 IDE 什么时候会弹出导入选项“@angular/core”、“PouchDB”、“NodeJS”和"events".internal。我尝试使用“@angular/core”,但它告诉我签名需要传入一个参数。
    • 导入来自@angular/core。签名缺失参数可能是指缺失的泛型。我还忘了提到你需要从标签向下发出,所以我会编辑它。
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多