ionic 2中多个选项卡中的单个搜索栏过滤项目

Posted

技术标签:

【中文标题】ionic 2中多个选项卡中的单个搜索栏过滤项目【英文标题】:single searchbar filter items in multiple tabs in ionic 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 方面还不够好,无法弄清楚如何在两个选项卡页面上获得它,并让所有事件和一切都自动在两个选项卡页面上运行。谢谢。

【问题讨论】:

【参考方案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。签名缺失参数可能是指缺失的泛型。我还忘了提到你需要从标签向下发出,所以我会编辑它。

以上是关于ionic 2中多个选项卡中的单个搜索栏过滤项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 在选项卡中的单个 csv 表中添加多个 csv

revit筛选快捷键

如何在 ionic 2 中自动完成(搜索栏)

在 ViewPager 的多个选项卡中使用单个片段

如何在每个操作栏选项卡中维护多个Fragment堆栈或多个子片段

如何在 Chrome DevTools 检查器的样式和计算选项卡中使用多个过滤器?