Suche…


Bemerkungen

Denken Sie immer daran, die Ionic 2 Tab-Dokumente zu lesen , um sich über die neuesten Änderungen und Updates zu informieren.

Ändern Sie die ausgewählte Registerkarte programmgesteuert von der untergeordneten Seite

Sie können den vollständigen Code in diesem funktionierenden Plunker nachlesen .

In diesem Beispiel verwende ich einen gemeinsam genutzten Dienst, um die Kommunikation zwischen den Seiten innerhalb der Registerkarte (untergeordnete Seiten) und dem Registerkartencontainer (der Komponente, die die Registerkarten enthält) zu handhaben. Auch wenn Sie dies mit Events wahrscheinlich tun könnten, gefällt mir der Shared-Service-Ansatz, denn er ist einfacher zu verstehen und auch zu verwalten, wenn die Anwendung wächst.

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);
  }
}

Der TabService erstellt also im TabService nur ein Observable , damit der Tabs-Container ihn abonnieren kann, und deklariert außerdem die changeTabInContainerPage() Methode, die von den changeTabInContainerPage() Seiten aufgerufen wird.

Dann fügen wir auf jeder untergeordneten Seite (die innerhalb der Registerkarten) nur eine Schaltfläche hinzu und binden das click Ereignis an eine Methode, die den Dienst aufruft:

Seite1.html

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

Seite1.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);
  }
}

Und schließlich abonnieren wir in der TabsPage nur den Dienst und ändern dann die ausgewählte Registerkarte mit 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);
    });
  }
}

#myTabs Sie, dass wir einen Verweis auf die Tabs-Instanz erhalten, indem #myTabs im Element ion-tabs #myTabs hinzufügen. Wir erhalten ihn von der Komponente mit @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>

Registerkarte mit selectIndex wechseln

Anstatt einen Verweis auf das DOM zu erhalten, können Sie einfach den Index der Registerkarte mithilfe des selectedIndex-Attributs auf den Ionenregistern ändern

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);
  }
}

Wenn Sie es von einem anderen Controller-Dienst ändern möchten, können Sie ein Ereignis senden:

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow