离子页面没有缓存

时间:2017-10-27 08:17:30

标签: caching ionic-framework navigation lifecycle

我有两页:

  • 主页
  • AboutPage

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是放置页面设置代码的好地方。

1 个答案:

答案 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