0

我正在使用 Ionic 2,并且有一个用例,其中有一个主页(父组件),主页内部有一个选项卡布局,在 Ionic 2 中,每个选项卡都是一个单独的组件(子组件)。

所以在一个标签中,我显示了用户列表,在主页上还有一个搜索栏,用户可以通过它搜索其他用户。所以现在当用户在搜索栏中输入时,会触发一个在主页(父组件)中定义的函数,但是当这个函数被触发时,我需要在用户选项卡(子组件)中引发一个事件,我将在其中进行过滤用户列表并显示在用户选项卡中。需要帮助来解决这个问题。以下是我的代码

<ion-content>
   <ion-tabs>
        //UsersTab comopnent class needs to know when getUsers function is triggered from home page
       <ion-tab tabTitle="List of Users" [root]="UsersTab"></<ion-tab>
       <ion-tab tabTitle="Tab 2" [root]="Tab2"></<ion-tab>
   </ion-tabs>
</ion-content>
<ion-footer>
    <ion-toolbar>
       <ion-title>
           // getUsers function will be defined is home page component class
           <ion-searchbar (ionInput)="getUsers($event)"></ion-searchbar>
       </ion-title>
    </ion-toolbar>
</ion-footer>

我希望我的问题很容易理解。

4

1 回答 1

1

您可以通过使用共享服务来实现这一点,就像您在这个 plunker中看到的那样。

该服务将负责存储项目列表并对其进行过滤:

import { Injectable } from "@angular/core";

@Injectable()
export class SharedService { 

  private userList: Array<string>;

  constructor(){
    this.initialiceUsers();
  }

  public initialiceUsers(){
    this.userList = [
      'Asdf Asdf',
      'Zxc Zxc',
      'Qwer Qwer',
      'Uiop Uiop'
    ];
  }

  public setUsers(users: Array<string>): void{
    this.userList = users;
  }

  public getUsers(): Array<string> {
    return this.userList;
  }

  public filterUsers(ev) {
    // Reset items back to all of the items
    this.initialiceUsers();

    // set val to the value of the searchbar
    let val = ev.target.value;

    // if the value is an empty string don't filter the items
    if (val && val.trim() != '') {
      this.userList = this.userList.filter((item) => {
        return (item.toLowerCase().indexOf(val.toLowerCase()) > -1);
      })
    }
  } 
}

父组件和子组件都将使用该服务发送搜索栏的值(以过滤项目)并获取要在视图中显示的项目列表。

于 2016-08-23T10:09:11.107 回答