Navigation
http://ionicframework.com/docs/v2/components/#navigation
更多深入的导航用法,请参考API文档。
Navigation
控制App内不同的页面间进行转换。Ionic
的Navigation
遵循各原生平台的导航原则。为了使导航更像原生导航,我们建立了几个新的导航组件,对开发者来说可能会感觉与传统桌面浏览器导航不太一样。
这里是几种Ionic App进行导航的方式:
基本用法
Navigation
是在ion-nav
组件内进行处理的,像一个简单的栈,页面被push
或被pop
,就可以实现向前导航或历史栈的后退导航。
首先从一个Nav
组件中设置的root page
开始:
import {StartPage} from 'start'
@Component({
template: '<ion-nav [root]="rootPage"></ion-nav>'
})
class MyApp {
// First page to push onto the stack
rootPage = StartPage;
}
接下来,我们在每个页面中注入Navigation Controller
。注意Page
组件不需要selector
,Ionic
会自动添加它们。
依赖注入的概念请自行参考
Angular 2
相关文档。简单来说,我们要在页面内用哪个组件,就可以将其注入进来,方法就是在Page
的构造函数中引入相应的变量。
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Login</ion-title>
</ion-navbar>
</ion-header>
<ion-content>Hello World</ion-content>`
})
export class StartPage {
constructor(public navCtrl: NavController) {
}
}
为了导航到另一个页面,只需要简单的在栈中push
或pop
即可:
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Login</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<button (click)="goToOtherPage()">
Go to OtherPage
</button>
</ion-content>`
})
export class StartPage {
constructor(public navCtrl: NavController) {}
goToOtherPage() {
//push another page onto the history stack
//causing the nav controller to animate the new page in
this.navCtrl.push(OtherPage);
}
}
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Other Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>I'm the other page!</ion-content>`
})
class OtherPage {}
如果页面中有<ion-navbar>
并且该页面不是root page
,那么将会自动显示一个后退按钮,NavBar
的标题也会自动更新。
如果你没有使用NavBar
,想要返回前一页的时候,可以把当前页面从栈中pop
出去:
@Component({
template: `
<ion-content>
<button (click)="goBack()"> There's no place like home
</button>
</ion-content>`
})
class OtherPage {
constructor(public navCtrl: NavController) {}
goBack() {
this.navCtrl.pop();
}
}
从根组件导航
如何从根组件控制导航?你不能注入NavController
因为任何Navigation Controller
组件都是根组件的Children
,所以它们不能被注入进来。
通过给ion-nav
添加一个引用变量,你可以使用@ViewChild
来获得Nav
组件的一个实例,它其实就是一个Navigation Controller
(但扩展了NavController
):
@Component({
template: '<ion-nav #myNav [root]="rootPage"></ion-nav>'
})
export class MyApp {
@ViewChild('myNav') nav
rootPage = TabsPage;
// Wait for the components in MyApp's template to be initialized
// In this case, we are waiting for the Nav identified by
// the template reference variable #myNav
ngAfterViewInit() {
// Let's navigate from TabsPage to Page1
this.nav.push(LoginPage);
}
}
Tabbed Navigation
Navigation
可以用在像Tabs
之类的复杂组件里。与传统的路由系统不同,Ionic
的导航系统使App内的导航非常简单,不需要指定特定的路由。比如为了使用iOS的App Store App,我们可以简单的从任意tab导航到AppDetailPage
来显示关于一个特定App的信息。看一下Tabs
的文档获取更多信息,了解如何简单的使用导航。