I am creating an Ionic application where I am using tabs. I want to be able to navigate from one tab to the other using the typescript component class attached to the tab template. For example, Tab 2 should be activated upon triggering an event in tab 1.
My tab loads well in the tabs and all is well as long as I manually click on the tab to move around, but trying to switch context in the code behind as been very tricky.
At load time I am able to make any one of the tabs active by simply setting the [selectedIndex] attribute of the ion-tabs to the value of an attribute in my tabs component class.
Tabs Parent Template - tab.html
<ion-tabs #tabParent [selectedIndex]="tabToShow">
<ion-tab tabTitle="Tab 1" [root]="tab2" [rootParams]="{parent : tabParent}"></ion-tab>
<ion-tab tabTitle="Tab 2" [root]="tab2" [rootParams]="{parent : tabParent}></ion-tab>
<ion-tab tabTitle="Tab 3" [root]="tab3" [rootParams]="{parent : tabParent}></ion-tab>
</ion-tabs>
Component - tab.ts
import {Page} from 'ionic-angular';
import {Tab1} from '../tab1/tab1.ts';
import {Tab2} from '../tab2/tab2.ts';
import {Tab3} from '../tab3/tab3.ts';
@Page({
templateUrl : 'build/pages/tab/tab.html'
})
export class Tab{
tab1: any;
tab2: any;
tab3: any;
tabToShow : number = 1;
ngOnInit(){
this.tab1 = Tab1;
this.tab2 = Tab2;
this.tab3 = Tab3;
}
}
In the component for the first tab (Tab1
), i am able to get a reference to the parent tabs by using [rootParams] = "{parent : tabParent}"
and I am able access all available properties exposed by the tabs object. An event generated on the tab1.html template, causes the goToTab2()
to be called. So, I was able to set SelectedIndex
to 1 (which I expect to change the active tab to the second tab). But the tab is not changing.
tab1.ts
import {Page, NavParams} from 'ionic-angular';
import {Tab2} from '../tab/tab2/tab2.ts'
@Page({
templateUrl : 'build/pages/tab/tab1/tab1.html'
})
export class Tab1{
parent : any;
constructor(nav : NavParams){
this.parent = nav.data;
}
goToTab2(event, value): void{
this.parent.parent.selectedIndex = 1;
console.log(this.parent.parent);
}
}
I need help, what am I doing wrong?
tabIndex starts from 0
You can get tabs element by using
@ViewChild
orIonicApp.getComponent()
. The tab-button can be accessed by going through tabs element. The tab-button click event is bound toonClick
function by using@HostListener
. You can switch tab by calling the tab-button onClick button.I wanted to navigate to tabbed pages from a side menu. To enable that I did the following:
Tabs.html:
Tabs.ts
}
Then I just passed the tab parameter from app.component.ts
}
Then in app.html
There you have it...
Its simple just use NavController class and its property .parent.select(position of tab you want)
In your tab1 component (tab1.ts),try to inject the parent component Tab :