常用的app都是采用tabs布局形式的,默认的ionic2的也是采用tabs的。
概述Tabs能够非常简单的在不同的页面间进行导航,Tabs组件写作<ion-tabs>,同时也是ion-tab的容器。
ion-tabs组件有以下常用属性:
- Placement:tabsPlacement
- Layout:tabsLayout
- Selecting a Tab:selectedIndex
Color
可以通过color属性为tabs设置背景色,当然,通常使用的是全局变量的颜色。
诸如:"primary", "secondary", "danger"
tabsHighlight
可以通过tabsHighlight来设置是否高亮选中的tab标签
默认为false
Placement
Tabs可以出现在屏幕的上方和下方
使用该属性来设置,写作:tabsPlacement,可选值有:top,bottom
默认值为bottom
同时也可以写在app的config文件里,这个是后话。
<ion-tabs #mainTabs tabsPlacement="top">
</ion-tabs>Layout
每个Tab上都会有图标和文字,图标和文字的位置设置使用tabsLayout属性来设置,图标和文字的位置组合有以下几种方式:
- icon-top:图标在上
- icon-lef:图标在左
- icon-right:图标在右
- icon-bottom:图标在下
- icon-hide:隐藏图标
- title-hide:文字隐藏
Selecting a Tab
可以通过在ion-tabs标签上增加selectedIndex属性来初始化默认选中的tabs,(从0开始)如:
<ion-tabs #mainTabs tabsLayout="title-hide" selectedIndex="2">
</ion-tabs>但是这样做相当于hard code写死了,所以一般采用调用Tabs实例等select()方法,来动态选择“选中的tab"
比如:
import  { Component,ViewChild }    from '@angular/core';
import  { HomePage }     from '../home/home';
import  { AboutPage }    from '../about/about';
import  { ContactPage }  from '../contact/contact';
import  { Tabs }         from 'ionic-angular';
@Component({
    templateUrl: 'tabs.html'
})
export class TabsPage {
    @ViewChild('mainTabs') tabRef:Tabs;
    // this tells the tabs component which Pages
    // should be each tab's root Page
    tab1Root: any = HomePage;
    tab2Root: any = AboutPage;
    tab3Root: any = ContactPage;
    constructor() {
    }
    ionViewDidEnter(){
        let mainTabs = this.tabRef;
        mainTabs.select(1);
    }
}
首先,需要在头部,从"angular/core"中将ViewChild引入进来,import  { Component,ViewChild }    from '@angular/core';,接着,从"ionic-angular"中将"Tabs"组件引入进来,import  { Tabs }         from 'ionic-angular';,接下来,就可以使用了,使用方式如下:
@ViewChild('mainTabs') tabRef:Tabs;
ionViewDidEnter(){
    let mainTabs = this.tabRef;
    mainTabs.select(1);
}上述代码大致意思是:
- 先使用ViewChild方法,通过id,找到Tabs的实例:mainTabs
- Tabs实例使用tabs的方法:select(),动态设置选中的tabs
完整代码如下:
import  { Component,ViewChild }    from '@angular/core';
import  { HomePage }     from '../home/home';
import  { AboutPage }    from '../about/about';
import  { ContactPage }  from '../contact/contact';
import  { Tabs }         from 'ionic-angular';
@Component({
    templateUrl: 'tabs.html'
})
export class TabsPage {
    @ViewChild('mainTabs') tabRef:Tabs;
    // this tells the tabs component which Pages
    // should be each tab's root Page
    tab1Root: any = HomePage;
    tab2Root: any = AboutPage;
    tab3Root: any = ContactPage;
    constructor() {
    }
    ionViewDidEnter(){
        let mainTabs = this.tabRef;
        mainTabs.select(1);
    }
}当然,还可以在一个子组件中,通过调用父页面的实例方法来实现切换tab页
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
@Component({
    selector: 'page-about',
    templateUrl: 'about.html'
})
export class AboutPage {
    constructor(public navCtrl: NavController) {
    }
    ionViewDidEnter(){
        this.navCtrl.parent.select(0);
    }
}
在tabs导航的某一页面中,默认会导入NavController,它的实例方法中有parent,假设它的parent就是tabs,那么就可以使用this.navCtro.parent.select()方法来进行切换tabs选择了。
上面代码的功能是在进入页面后,自动切换到第一个tab页。
调试抓取一下Tab的实例看看都有哪些成员:
从上面可以看到Tabs的实例成员。
常用的有:select,previousTab,getByIndex,getSelected
另外,可以看到,有个ionChange方法,说明了它的change事件的触发器,具体实现如下(其实就是ng2的绑定事件):
html中声明事件:
<ion-tabs #mainTabs (ionChange)="changeTabs()" color="danger" tabsHighlight="true">
    <ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="home"></ion-tab>
    <ion-tab [root]="tab2Root" tabTitle="Friends" tabIcon="aperture" tabBadge="3" tabBadgeStyle="danger"></ion-tab>
    <ion-tab [root]="tab3Root" tabTitle="Contact" tabIcon="contacts"></ion-tab>
</ion-tabs>在ts文件中:
import  { Component,ViewChild }    from '@angular/core';
import  { HomePage }     from '../home/home';
import  { AboutPage }    from '../about/about';
import  { ContactPage }  from '../contact/contact';
import  { Tabs }         from 'ionic-angular';
@Component({
    templateUrl: 'tabs.html'
})
export class TabsPage {
    @ViewChild('mainTabs') tabRef:Tabs;
    // this tells the tabs component which Pages
    // should be each tab's root Page
    tab1Root: any = HomePage;
    tab2Root: any = AboutPage;
    tab3Root: any = ContactPage;
    constructor() {
        // this.changeTabs = function(){
            //  alert(1)
            // };
        }
        changeTabs = function(){
            console.log("tab changed");
        };
        ionViewDidEnter(){
            let mainTabs = this.tabRef;
            debugger;
            mainTabs.select(1);
        }
    }可以看到,changeTabs方法,既可以卸载构造函数中,也可以直接放在外面,ng2的标准写法应该是写在外面?
ng2还在学习ing。。。将来再回来补充。。。
至此,tabs的常规用法就差不多了。。。
最后,惯例附上官网doc链接:
官网链接
 
		









 随时随地看视频
随时随地看视频 
				 
				 
				 
				 
				 
				
热门评论
- 
			  
				酸辣粉儿2017-06-07 0 
 
- 
			  
				:游志东2017-04-04 0 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
- 
			  
				qq_將心彼心比_042616792017-03-20 0 
 
查看全部评论你好,请问一下,现在我有四个页面,A-B-C-D,四个页面依次进入,现在想从D页面直接返回A页面,A页面不是Root页面,请问一下为什么使用:this.nav.popTo(A),这个方法并不能起作用,而且跟pop的作用一样。只返回了C页面。
error: Cannot read property 'select' of undefined
下面是我的,代码。。。。。。是不是 import { Tabs } from 'ionic-angular'; 这个路径有问题
import { Component, ViewChild} from '@angular/core'; //引进ViewChild
import { HomePage } from '../home/home';
import { AboutPage } from '../about/about';
import { ContactPage } from '../contact/contact';
import { Tabs } from 'ionic-angular'; //引进Tabs组件
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
tab1Root: any = HomePage;
tab2Root: any = AboutPage;
tab3Root: any = ContactPage;
constructor() {
};
@ViewChild('myTabs') tabRef: Tabs;
ionViewDidEnter() {
this.tabRef.select(2);
}
}
66666666666666666666