【问题标题】:Selected Tab in Ionic framework离子框架中的选定选项卡
【发布时间】:2019-01-15 20:21:05
【问题描述】:

我想显示两个用于显示相似数据的选项卡,但这些选项卡将用于过滤信息。

我的标签:

import { Component } from '@angular/core';
import { DataPage } from './DataPage';

@Component({
    template: `
      <ion-tabs>
        <ion-tab tabIcon="heart" [root]="tab1"></ion-tab>
        <ion-tab tabIcon="star" [root]="tab2"></ion-tab>
      </ion-tabs>`
})
class MyApp {

    tab1: any;
    tab2: any;

    constructor() {
      this.tab1 = DataPage;
      this.tab2 = DataPage;
    }
}

页面:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

@Component({

})
class DataPage {

   constructor(public navCtrl: NavController) {
     //********************
     //Here I want to know which tab was selected
     //********************
     console.log("SELECTED TAB")
   }
}

当调用 DataPage 时,我需要知道它是从哪个选项卡启动的。有没有办法找出选择了哪个选项卡,或者我应该复制 DataPage(感觉多余)?

谢谢!

【问题讨论】:

    标签: angular typescript ionic-framework tabs ionic3


    【解决方案1】:

    使用 (ionChange) 捕捉用户何时更改选项卡。您可以创建提供程序来获取和设置活动选项卡。

    Tab.ts

    import { Tabs, Tab } from 'ionic-angular';
    import { Component, ViewChild} from '@angular/core';
    
    @Component({
    templateUrl: 'tabs.html'
    })
    
    export class TabsPage {
      @ViewChild('myTabs') tabRef: Tabs
    
      tab1: any = DataPage;
      tab2: any = DataPage;
    
      constructor(private tabService: TabsService) {
        this.configService.startConfigApp();
    
      }
      ionViewDidEnter(){
        let tab: Tab = this.tabRef.getSelected();
        this.tabService.setActiveTab(tab);
      }
      changeTab(){
        let tab: Tab = this.tabRef.getSelected().root.name; //or this.tabRef.getSelected().index;
        this.tabService.setActiveTab(tab);
      }
    }
    

    Tabs.html

    <ion-tabs color="prime-grey" #myTabs (ionChange)="changeTab()">
      <ion-tab [root]="tab1Root" tab1="DataPage" tabIcon="home"></ion-tab>
      <ion-tab [root]="tab2Root" tab2="DataPage" tabIcon="pie"></ion-tab>      
    </ion-tabs>
    

    TabProvider.ts

    import { Injectable } from '@angular/core'
    
    @Injectable()
    export class TabsProvider{
        private tabName: any;
        constructor(){}
    
        setActiveTab(tab: any){
            this.tabName = tab;
        }
        getActiveTab(){
            return this.tabName;
        }
    }
    

    在您的datapage.ts 上导入提供程序并使用 IonViewWillEnter 生命周期来捕获页面何时处于活动状态。

    DataPage.ts

    import { Component } from '@angular/core';
    import { NavController } from 'ionic-angular';
    import { TabsProvider } from '../path/to/your/provider'
    @Component({
    
    })
    class DataPage {
    
       constructor(public navCtrl: NavController, private tabProvider: tabsProvider) {
         //********************
         //Here I want to know which tab was selected
         //********************
    
       }
       IonViewWillEnter(){
         console.log(this.tabProvider.getActiveTab())
       }
    
    }
    

    【讨论】:

      【解决方案2】:

      我终于可以得到索引了。

      tabs.html

      <ion-tabs  (ionChange)="tabChange($event)"> 
          <ion-tab [root]="tab1Root" tabTitle="Offers"  tabIcon="Offers" ></ion-tab>
          <ion-tab [root]="tab2Root" tabTitle="Favourites"  tabIcon="Favorites"></ion-tab>
          <ion-tab [root]="tab3Root" tabTitle="Rewards"  tabIcon="Rewards"></ion-tab>
          <ion-tab [root]="tab4Root" tabTitle="Settings"  tabIcon="Settings"></ion-tab>
      </ion-tabs>
      

      tabs.ts

      import { Tabs,Events,Tab} from 'ionic-angular';
        tabChange(tab:Tab){
              console.log(tab.index);
        }
      

      【讨论】:

      • Ionic 5 中的导入模块是什么 import { Tabs,Events,Tab} from 'ionic-angular'; 在 Ionic 5 中出现错误。...has no exported member Tabs... I tried @ionic/core, '@ionic/angular`
      • 它确实有效,我需要使用ionic start myapp tabs --type=ionic-angular 创建一个新应用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多