来自自己的理解和官网翻译
1.NavController概述
NavController是导航控制器组件的基类,如Nav和Tab。 您可以使用导航控制器导航到应用程序中的页面。 在基本级别,导航控制器是表示特定历史(例如,Tab)的页面的数组。 可以通过按压和弹出页面或在历史记录中的任意位置插入和删除这些数组来操纵整个应用程序。
当前页面是数组中的最后一个页面,或者堆栈的顶部,如果我们想到这样的话。 将新页面推入导航堆栈的顶部会导致新页面动画化,而弹出当前页面则将导航到堆栈中的上一页。
除非您使用像NavPush这样的指令,或者需要特定的NavController,否则大多数情况下,您将注入并使用最接近的NavController的引用来操作导航堆栈。
2.基本用法:
浏览应用程序的最简单方法是使用
import { Component } from `@angular/core`;
import { StartPage } from './start-page';
@Component(
template: ` `
})
class MyApp {
// set the rootPage to the first page we want displayed
public rootPage: any = StartPage;
constructor(){
}
}
3.注入NavController注入NavController将始终为您提供最近的NavController的实例,无论它是Tab还是导航。
在幕后,当Ionic实例化一个新的NavController时,它创建一个注射器,NavController绑定到该实例(通常是Nav或Tab),并将注入器添加到其自己的提供者。
相反,您可以注入NavController,并知道它是大多数情况下正确的导航控制器
import { NavController } from 'ionic-angular';
class MyComponent {
constructor(public navCtrl: NavController) {
}
}
4.从根组件导航如果你想控制从你的根应用程序组件导航怎么办? 您不能注入NavController,因为导航控制器的任何组件都是根组件的子项,因此无法注入。
通过向ion-nav添加引用变量,您可以使用@ViewChild获取Nav组件的一个实例,它是一个导航控制器(它扩展NavController):注意123点代码中注释的
视图在添加到导航堆栈中时创建。 对于像push()这样的方法,NavController接受使用@Component装饰的任何组件类作为其第一个参数。 然后,NavController编译该组件,将其添加到应用程序并将其动画化为视图。
默认情况下,页面被缓存并保留在DOM中,如果它们远离但仍在导航堆栈(例如push()中的退出页面)。 当从导航堆栈(在pop()或setRoot())上删除时,它们被销毁。
7.push一个视图
要将新视图推入导航堆栈,请使用push方法。 如果页面有
传递参数页面:
接收参数页面:
html:
8.移除一个视图:
要从堆栈中删除视图,请使用pop方法。 弹出视图将转换到上一个视图。
html:
效果:事件触发当前视图被移除,页面回到上一个页面视图
9.生命周期事件
生命周期事件在不同的导航阶段触发。 可以从任何从NavController中push/pop的组件类型中定义它们。
Page Event | Returns | Description |
ionViewDidLoad | void | 页面加载时运行。 此事件仅在每个页面创建时发生一次。 如果页面离开但被缓存,则此事件将不会在后续查看时再次启动。 ionViewDidLoad事件是放置页面的设置代码的好地方。 |
ionViewWillEnter | void | 当页面即将进入并成为激活页面时运行。 |
ionViewDidEnter | void | 当页面已完全输入并且现在是激活页面时运行。 此事件将触发,无论是第一次加载还是缓存页面。 |
ionViewWillLeave | void | 当页面即将离开并且不再是激活页面时运行。 |
ionViewDidLeave | void | 当页面完成离开时运行,并且不再是激活页面。 |
ionViewWillUnload | void | 当页面即将被销毁并删除其元素时运行。 |
ionViewCanEnter ionViewCanLeave |
boolean/Promise |
在视图可以进入之前运行。 这可以在认证视图中用作“保护”,您需要在视图输入之前检查权限 视图可以离开时运行。 这可以在认证视图中用作“守卫”,您需要在视图离开之前检查权限 |
在某些情况下,开发人员应该能够控制离开和进入的视图。 为了允许这一点,NavController具有ionViewCanEnter和ionViewCanLeave方法。 与Angular路线守卫类似,但与NavController更加集成。 例如,如果您想阻止用户离开视图:
我们需要确保我们的navCtrl.push有一个catch来捕捉并处理错误。 如果你需要防止视图进入,你可以做同样的事情
11NavOptions
NavController上的一些方法允许自定义当前的转换。 为此,我们可以传递具有修改的属性的对象。
Property | Value | Description |
---|---|---|
animate | boolean |
Whether or not the transition should animate. |
animation | string |
What kind of animation should be used. |
direction | string |
The conceptual direction the user is navigating. For example, is the user navigating forward , or back ? |
duration | number |
The length in milliseconds the animation should take. |
easing | string |
The easing for the animation. |
canGoBack()
如果有一个有效的上一页我们可以弹回来,返回true。 否则返回false。
canSwipeBack()
如果可以使用滑动回来。 如果不可能返回,或者滑回不启用,那么这将返回false。 如果可以返回,并且启用滑动,那么这将返回true。
first()
返回此导航控制器堆栈中的第一个视图控制器。
getActive()
返回激活页面的视图控制器。
getActiveChildNav()
返回活动的子导航。
getActiveChildNavs()
返回活动子导航列表。
getByIndex(index)
Param | Type | Details |
---|---|---|
index | number |
要获取的页面的索引。 |
ViewController
getPrevious(view)
返回给定视图控制器之前的视图控制器。 如果没有传入视图控制器,那么它将默认为活动视图。
Param | Type | Details |
---|---|---|
view | ViewController |
|
viewController
Array
该导航控制器中的视图控制器堆栈。
number
insert(insertIndex, page, params, opts)
在指定的索引中将一个组件插入到导航堆栈中。 如果您需要在导航堆栈中的任何位置添加组件,这将非常有用。
属性 | 类型 | 详情 |
---|---|---|
insertIndex | number |
The index where to insert the page.索引 在哪里插入页面。 |
page | Page |string |
The component class or deeplink name you want to push onto the navigation stack. 要推送到导航堆栈的组件类或深层名称。 |
params | object |
Any NavParams you want to pass along to the next view 您想传递给下一个视图的任何NavParams .OPTIONAL |
opts | object |
Nav options to go with this transition 导航选项可以随着这个过渡。 .OPTIONAL |
Promise
在指定的索引中将导入堆栈中的一个组件数组插入。 数组中的最后一个组件将被实例化为一个视图,并且动画化成为主动视图。
属性 | 类型 | 详情 |
---|---|---|
insertIndex | number |
The index where you want to insert the page. 要插入页面的索引。 |
insertPages | array |
An array of objects, each with a 一组对象,每个都有一个页面和可选的params属性。 |
opts | object |
Nav options to go with this transition 导航选项可以随着这个过渡。 .OPTIONAL |
Promise
返回转换完成后解决的承诺。
如果导航控制器正在激活转换,则返回。
Param | Type | Details |
---|---|---|
page | Page |string |
The component class or deeplink name you want to push onto the navigation stack. 要推送到导航堆栈的组件类或深层名称。 |
params | object |
Any NavParams you want to pass along to the next view 您想传递给下一个视图的任何NavParams。 .OPTIONAL |
opts | object |
Nav options to go with this transition 导航选项可以随着这个过渡。 .OPTIONAL |
remove(startIndex, removeCount, opts)
Param | Type | Details |
---|---|---|
startIndex | number |
The starting index to remove pages from the stack. Default is the index of the last page. 从堆栈中删除页面的起始索引。 默认是最后一页的索引。 |
removeCount | number |
The number of pages to remove, defaults to remove |
opts | object |
Any options you want to use pass to transtion 您想要使用的任何选项都转移到转换 .OPTIONAL |
Promise
removeView(viewController, opts)
Param | Type | Details |
---|---|---|
viewController | ViewController |
The viewcontroller to remove 要删除的viewcontroller。 .OPTIONAL |
opts | object |
Any options you want to use pass to transtion.OPTIONAL |
setPages(pages, opts)
Array<{page:any, params: any}>
An array of objects, each with a page
and optionally params
property to load in the stack
一组对象,每个对象都有一个页面,并且可选的params属性加载到堆栈中.
optsObject
Nav options to go with this transition.OPTIONAL
setRoot(pageOrViewCtrl, params, opts, done)
设置当前导航堆栈的根。
Param | Type | Details |
---|---|---|
pageOrViewCtrl | Page |string |ViewController |
The name of the component you want to push on the navigation stack. 要在导航堆栈上推送的组件的名称。 |
params | object |
Any NavParams you want to pass along to the next view 您想传递给下一个视图的任何NavParams。 .OPTIONAL |
opts | object |
Any options you want to use pass to transtion 您想要使用的任何选项都转移到转换 .OPTIONAL |
done | Function |
Callback function on done. Callback功能完成。 |
swipeBackEnabled
viewDidEnter
viewDidLeave
viewDidLoad
viewWillEnter
viewWillLeave
viewWillUnload