首页 > 解决方案 > 如何操作 IONIC3 的内部页面历史记录?

问题描述

我一直在构建一个 Angular4/Ionic3 应用程序,但我遇到了一些与浏览器历史和 Ionic 的历史相关怪癖相关的绊脚石。

首先,一些背景信息。我的应用程序使用 navCtrl.SetRoot() 进行所有页面转换,因为 .pop() 和 .push() 不能很好地刷新浏览器页面。在开发过程中,我注意到 Ionic 导航的一个怪癖:如果您从 Page1 转到 Page2,然后尝试再次转到 Page1(使用 .SetRoot("Page1")),Ionic 会查看它的历史并注意到您是在 Page1 就在 Page2 之前,因此它将决定在浏览器历史记录中倒退,而不是在历史记录中创建 Page1 的新实例。在 .SetRoot("Page1") 操作结束时,历史将看起来像 '->Page1<- Page2' 而不是 'Page1 Page2 ->Page1<-'。

现在,这通常不是问题,但我注意到 Ionic 的内部存储历史与浏览器历史是分离的。因此,如果 Ionic 的历史记录与浏览器的历史记录不同,就会开始出现问题。例如,如果您刷新页面,则浏览器历史记录保持不变,但 Ionic 的历史记录变为仅包含当前页面的列表。

前任

  1. 如果我们从 Page1 到 Page2 再到 Page3 然后刷新 浏览器历史记录:'Page1 Page2 ->Page3<-' 离子历史记录:'->Page3<-'

  2. 现在我们通过按浏览器后退按钮转到第 2 页 Browser History: 'Page1 ->Page2<- Page3' Ionic History: 'Page3 ->Page2<-'(因为它在 Page3 之前没有找到 Page2 的实例历史,它会创建一个新实例并将其放在堆栈的顶部)

  3. 现在我们 SetRoot("Page3")。因为 Ionic History 认为它需要返回到 Page3 它将迫使浏览器 History 也返回以尝试保持匹配。 浏览器历史:'->Page1<- Page2 Page3' 离子历史:'->Page3<- Page2'

  4. 结果:由于浏览器历史记录现在位于第 1 页上,因此 url 发生了更改,因此会触发一个额外的不需要的转换,当我们也想转到第 3 页时,它会将我们带到第 1 页。

只是说清楚:我所说的离子历史是我认为由于我的应用程序的行为而存在的东西。我从未真正看到它的存储位置。此外,我确信 Ionic History 与 NavCtrl Navigation Stack 不同,因为我的应用程序仅使用 .SetRoot(),因此 Navigation Stack 只是一个长度为 1 的数组,其中仅包含当前 Page。

说了这么多,这是我的问题:

有没有办法访问和操作 Ionic 框架内部存储的历史?至少有办法擦掉它吗?

谢谢。

标签: ionic-frameworkionic3

解决方案


推荐阅读