ionic2
Использование вкладок
Поиск…
замечания
Всегда помните, чтобы проверить документы Ionic 2 Tab, чтобы знать о последних изменениях и обновлениях.
Измените выбранную вкладку программно с дочерней страницы
Вы можете посмотреть полный код этого рабочего Plunker .
В этом примере я использую общую службу для обработки связи между страницами внутри вкладки (дочерние страницы) и контейнером табуляции (компонент, который содержит вкладки). Несмотря на то, что вы, вероятно, могли бы это сделать с помощью событий, мне нравится подход к общему сервису, потому что его легче понять, а также поддерживать, когда приложение начинает расти.
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);
}
}
Таким образом, в основном TabService
создает только Observable
чтобы позволить табуляции подписываться на него, а также объявляет метод changeTabInContainerPage()
который будет вызываться из дочерних страниц.
Затем на каждой дочерней странице (внутри вкладки) мы добавляем только кнопку и привязываем событие click
к методу, который вызывает службу:
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);
}
}
И, наконец, в TabsPage
мы подписываемся только на услугу, а затем меняем выбранную вкладку с 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);
});
}
}
Обратите внимание, что мы получаем ссылку на экземпляр Tabs, добавляя #myTabs
в элемент ion-tabs
, и мы получаем его из компонента с помощью @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>
Заменить вкладку с помощью selectedIndex
Вместо того, чтобы получать ссылку на DOM, вы можете просто изменить индекс вкладки, используя атрибут selectedIndex на вкладках ионов
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);
}
}
Если вы хотите изменить его из какой-либо другой службы контроллера, вы можете отправить событие:
e.publish("tab:change",2);