Caching 未缓存的网页

Caching 未缓存的网页,caching,ionic-framework,navigation,lifecycle,Caching,Ionic Framework,Navigation,Lifecycle,我有两页: 主页 约页 主页是根页面 在启动主页时,调用#ionViewDidLoad。我使用NavController从主页导航到AboutPage: navigateToAbout(): void { this.navCtrl.push('AboutPage'); } 每次我导航到AboutPage时,都会调用AboutPage#ionViewDidLoad。如果我使用ionnavbar导航回主页,则不会调用HomePage#ionViewDidLoad,但如果我使用navCtr

我有两页:

  • 主页
  • 约页
主页是根页面

在启动
主页时,调用#ionViewDidLoad
。我使用NavController从主页导航到AboutPage:

navigateToAbout(): void {
   this.navCtrl.push('AboutPage');
}
每次我导航到AboutPage时,都会调用
AboutPage#ionViewDidLoad
。如果我使用
ionnavbar
导航回主页,则不会调用
HomePage#ionViewDidLoad
,但如果我使用
navCtrl.push('HomePage')
,则会再次调用
HomePage#ionViewDidLoad

有人能解释一下,如果我使用
navCtrl.push(…)
,为什么每次都会调用ionViewDidLoad。根据定义,应缓存页面,且ionViewDidLoad每页仅应调用一次:

视图创建

默认情况下,如果页面被导航,则页面被缓存并留在DOM中 远离导航堆栈但仍在导航堆栈中(导航堆栈上的退出页面 例如push()。当从系统中移除时,它们将被销毁 导航堆栈(在pop()或setRoot()上)

ionViewDidLoad

加载页面后运行。这件事只会发生 每创建一页一次。如果页面离开但被缓存,那么 事件不会在后续查看时再次触发。ionViewDidLoad 事件是放置页面设置代码的好地方


因为如果使用导航栏导航回主页,将使用
pop()
方法。如果在AboutPage上使用
push('HomePage')
,则创建主页的新实例,然后调用
ionViewDidLoad()

只有已经在导航堆栈上的页面才会被缓存(就像第一次推送AboutPage时的主页),但是推送到导航堆栈的页面总是新创建的

也许这个例子有助于形象化这一点:

一,。启动后的初始状态:

二,。导航推送('AboutPage')后的状态:

三,。说明是否使用导航栏向后导航或
pop()

四,。说明是否在第二步后使用
.push('HomePage')


因为如果使用导航栏导航回主页,将使用
pop()
方法。如果在AboutPage上使用
push('HomePage')
,则创建主页的新实例,然后调用
ionViewDidLoad()

只有已经在导航堆栈上的页面才会被缓存(就像第一次推送AboutPage时的主页),但是推送到导航堆栈的页面总是新创建的

也许这个例子有助于形象化这一点:

一,。启动后的初始状态:

二,。导航推送('AboutPage')后的状态:

三,。说明是否使用导航栏向后导航或
pop()

四,。说明是否在第二步后使用
.push('HomePage')

[HomePage]
[HomePage, AboutPage]
 ^^^^^^^^
  cached
[HomePage] // The cached instance is used so ionViewDidLoad() is not called
[HomePage, AboutPage, HomePage] // a new instance is created so ionViewDidLoad() is called
 ^^^^^^^^  ^^^^^^^^^
  cached    cached