我有两页:
HomePage是 rootPage 。
在启动HomePage#ionViewDidLoad
时调用。我使用NavController从主页导航到AboutPage:
navigateToAbout(): void {
this.navCtrl.push('AboutPage');
}
每当我导航到AboutPage时,都会调用AboutPage#ionViewDidLoad
。如果我使用ion-navbar
导航回主页,HomePage#ionViewDidLoad
不,但如果我使用navCtrl.push('HomePage')
,则会再次调用HomePage#ionViewDidLoad
。
有人可以解释一下,如果我使用navCtrl.push(...)
,每次都会调用ionViewDidLoad。根据{{3}},应该缓存页面,并且每页只应调用一次ionViewDidLoad:
查看制作
默认情况下,页面会被缓存并在导航时留在DOM中 远离但仍然在导航堆栈中(在 push()例如)。它们从被移除时被摧毁 导航堆栈(在pop()或setRoot()上)。
ionViewDidLoad
页面加载后运行。此事件只会发生 每页创建一次。如果一个页面离开但是被缓存,那么这个 在随后的观看中,事件不会再次触发。 ionViewDidLoad event是放置页面设置代码的好地方。
答案 0 :(得分:2)
因为如果您使用导航栏导航回HomePage,则使用pop()
方法。如果在AboutPage上使用push('HomePage')
,则会创建HomePage的新实例,然后调用ionViewDidLoad()
。
仅缓存已存在于导航堆栈中的页面(如第一次推送AboutPage时的HomePage),但总是新创建推送到导航堆栈的页面。
也许这个例子有助于形象化:
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