提交 13ec437e 编写于 作者: fxy060608's avatar fxy060608

fix: 修复页面 onUnload 不触发的 bug

上级 cb0c3123
......@@ -38,7 +38,10 @@ function reLaunch (toName) {
this.keepAliveInclude = []
}
let currentPages = []
function beforeEach (to, from, next, routes) {
currentPages = getCurrentPages(true) // 每次 beforeEach 时获取当前currentPages,因为 afterEach 之后,获取不到上一个 page 了,导致无法调用 onUnload
const fromId = from.params.__id__
const toId = to.params.__id__
if (toId === fromId) { // 相同页面阻止
......@@ -97,7 +100,7 @@ function afterEach (to, from) {
const fromId = from.params.__id__
const toId = to.params.__id__
const fromVm = getCurrentPages(true).find(pageVm => pageVm.$page.id === fromId)
const fromVm = currentPages.find(pageVm => pageVm.$page.id === fromId) // 使用 beforeEach 时的 pages
switch (to.type) {
case 'navigateTo': // 前一个页面触发 onHide
......@@ -121,10 +124,10 @@ function afterEach (to, from) {
}
if (to.type !== 'reLaunch') { // 因为 reLaunch 会重置 id,故不触发 onShow,switchTab 在 beforeRouteEnter 中触发
// 直接获取所有 pages,getCurrentPages 正常情况下仅返回页面栈内,传 true 则返回所有已存在(主要是 tabBar 页面)
const toVm = getCurrentPages(true).find(pageVm => pageVm.$page.id === toId)
const toVm = getCurrentPages(true).find(pageVm => pageVm.$page.id === toId) // 使用最新的 pages
if (toVm) { // 目标页面若已存在,则触发 onShow
// 延迟执行 onShow,防止与 UniServiceJSBridge.emit('onHidePopup') 冲突。
setTimeout(function () {
setTimeout(function () {
callPageHook(toVm, 'onShow')
}, 0)
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册