Sök…


Anmärkningar

Kom alltid ihåg att kolla in Ionic 2 Tab-dokument för att vara medveten om de senaste ändringarna och uppdateringarna.

Ändra vald flik programatiskt från barnsidan

Du kan titta på hela koden i den här fungerande Plunkeren .

I det här exemplet använder jag en delad tjänst för att hantera kommunikationen mellan sidorna i fliken (underordnade sidor) och flikbehållaren (komponenten som innehåller flikarna). Även om du förmodligen skulle kunna göra det med händelser gillar jag den delade tjänsten för att det är lättare att förstå och också att hantera när applikationen börjar växa.

TabService

import {Injectable} from '@angular/core';
import {Platform} from 'ionic-angular/index';
import {Observable} from 'rxjs/Observable';
 
@Injectable()
export class TabService { 
  
  private tabChangeObserver: any;
  public tabChange: any;

  constructor(private platform: Platform){
    this.tabChangeObserver = null;
    this.tabChange = Observable.create(observer => {
        this.tabChangeObserver = observer;
    });
  }
  
  public changeTabInContainerPage(index: number) {
    this.tabChangeObserver.next(index);
  }
}

Så i grunden skapar TabService bara en Observable att låta flikbehållaren prenumerera på den och förklarar också changeTabInContainerPage() som kommer att anropas från barnsidorna.

Sedan lägger vi bara till en knapp på varje underordnad sida (de som finns i flikarna) och binder click till en metod som kallar tjänsten:

Page1.html

<ion-content class="has-header">
    <h1>Page 1</h1>
    <button secondary (click)="changeTab()">Select next tab</button>
</ion-content>

Page1.ts

import { Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { TabService } from 'tabService.ts';

@Component({
  templateUrl:"page1.html"
})
export class Page1 {

  constructor(private tabService: TabService) { }

  public changeTab() {
    this.tabService.changeTabInContainerPage(1);
  }
}

Och till slut, på TabsPage , prenumererar vi bara tjänsten och sedan ändrar vi den valda fliken med this.tabRef.select(index);

import { Component, ViewChild } from "@angular/core";
import { Page1 } from './page1.ts';
import { Page2 } from './page2.ts';
import { TabService } from 'tabService.ts'; 

@Component({
  templateUrl: 'tabs.html'
})
export class TabsPage {
  @ViewChild('myTabs') tabRef: Tabs;

  tab1Root: any = Page1;
  tab2Root: any = Page2;

  constructor(private tabService: TabService){
    this.tabService.tabChange.subscribe((index) => {
      this.tabRef.select(index);
    });
  }
}

Observera att vi får en referens till Tabs-instansen genom att lägga till #myTabs i #myTabs ion-tabs , och vi får det från komponenten med @ViewChild('myTabs') tabRef: Tabs;

<ion-tabs #myTabs>
  <ion-tab [root]="tab1Root" tabTitle="Tab 1"></ion-tab>
  <ion-tab [root]="tab2Root" tabTitle="Tab 2"></ion-tab>
</ion-tabs>

Ändra fliken med valdIndex

Istället för att få en referens till DOM kan du helt enkelt ändra flikens index med det valdaIndex-attributet på jon-flikarna

HTML:

 <ion-tabs [selectedIndex]="tabIndex" class="tabs-icon-text" primary >
      <ion-tab tabIcon="list-box"   [root]="tabOne"></ion-tab>
      <ion-tab tabIcon="contacts"  [root]="tabTwo"></ion-tab>
      <ion-tab tabIcon="chatboxes"  [tabBadge]="messagesReceived" [root]="tabFive"></ion-tab> 
 </ion-tabs>

TS:

 import { Events} from "ionic-angular";

 export class tabs {
  public tabIndex: number;
  constructor(e: Events) {
    tabs.mySelectedIndex = navParams.data.tabIndex || 0;
    e.subscribe("tab:change", (newIndex) => this.tabIndex = newIndex);
  }
}

Om du vill ändra den från någon annan kontrolltjänst kan du skicka en händelse:

e.publish("tab:change",2);


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow