我有两个页面:
- 主页
- 关于页面
HomePage是根页面。
在启动时调用CCD_ 1。我使用NavController:从主页导航到AboutPage
navigateToAbout(): void {
this.navCtrl.push('AboutPage');
}
每次我导航到AboutPage时,都会调用AboutPage#ionViewDidLoad
。如果我使用ion-navbar
导航回主页,则会不调用HomePage#ionViewDidLoad
,但如果我使用了navCtrl.push('HomePage')
,则会再次调用HomePage#ionViewDidLoad
。
有人能解释一下,如果我使用navCtrl.push(...)
,为什么每次都调用ionViewDidLoad吗。根据Ionic NavController文档,页面应该被缓存,并且每个页面只能调用一次ionViewDidLoad:
视图创建
默认情况下,如果对页面进行导航,则会将其缓存并留在DOM中远离但仍在导航堆栈中(push())。当它们从导航堆栈(在pop()或setRoot()上)。
ionViewDidLoad
加载页面后运行。此事件只发生每创建一页一次。如果页面离开但被缓存,则事件将不会在后续查看中再次启动。ionViewDidLoad事件是放置页面设置代码的好地方。
因为如果使用导航栏导航回主页,则会使用pop()
方法。如果在AboutPage上使用push('HomePage')
,则会创建主页的新实例,随后会调用HomePage#ionViewDidLoad
0。
只有已经在导航堆栈上的页面才会被缓存(就像第一次推送AboutPage时的主页),但推送到导航堆栈的页面总是新创建的。
也许这个例子有助于将其可视化:
1.启动后的初始状态:
[HomePage]
2.nav.push('AboutPage')
:后的状态
[HomePage, AboutPage]
^^^^^^^^
cached
3.说明是否使用导航条导航返回或pop()
:
[HomePage] // The cached instance is used so ionViewDidLoad() is not called
4.如果在第二步后使用.push('HomePage')
,请说明:
[HomePage, AboutPage, HomePage] // a new instance is created so ionViewDidLoad() is called
^^^^^^^^ ^^^^^^^^^
cached cached