问题一:
iOS WebView 中,单页应用链接 A,跳转链接 B,然后快速的前进后退,(偶现)会出现 B 后退到 A、A 页面图片不显示的问题。
其中 A 页面:读取项目中的 JSON,渲染数据,图片来自项目。
这个问题偶现,不容易复现。
问题二:
页面 A,到页面 B,疯狂 A <-> B 间前进后退切换,会出现 B 后退到 A、A 页面空白。
问题二延伸:
无关前进后退,分别对 A、B 页面进行刷新,也会出现空白的情况。
问题三:
路由信息变化过程:
进入活动中心:
beforeEach: to:route.path = /、route.name = Home
afterEach: before:route.path = /、route.name = undefined to:route.path = /、route.name = Home
页面刷新:
beforeEach: to:route.path = /2024、route.name = 2024
afterEach: before:route.path = /、route.name = undefined to:route.path = /2024、route.name = 2024
进入活动中心,在获取数据后(此时)进行页面跳转,有可能在 before 状态,因此无法进行跳转到菜单第一项。之后页面路由信息就算正常到 route.name = Home,也没有进行跳转的操作。(那此时可以在 App.vue 中 watch 啊??)
修改:
在全局路由守卫 afterEach 进行判断,进入首页时,进行跳转。要先获取菜单数据,在其中进行跳转,如果已有菜单数据,直接判断跳转。
修改2:
获取数据时进行跳转。 watch 侦听 route.name 变化,同时 newMenuData 要存在。
watch 时已经获取了数据,直接在 watch 中进行跳转
- newMenuData: xxx
- afterEach from: / undefined
- afterEach to : / Home
- module: undefined
- watch
- old route name:undefined
- new route name:Home
- watch 开始 router replace
- afterEach from:/ Home
- afterEach to :/2024
- module:2024
- old route name: Home
- new route name: 2024
watch 时还没获取到数据,在获取数据时进行跳转
- afterEach from:/ undefined
- afterEach to :/ Home
- module: undefined
- watch
- old route name: undefined
- new route name: Home
- newMenuData: xxx
- getAllEvents 开始 router replace
- afterEach from:/ Home
- afterEach to :/2024
- module:2024
- old route name: Home
- new route name: 2024
总结
只考虑 watch,watch 时跳转,路由 undefined -> Home 时,有可能还未获取到菜单数据 newMenuData;
只考虑获取数据时跳转,获取到数据时,有可能路由还是 undefined()
而结合使用,在获取数据时,即使路由可能还是 undefined,那么当变为 Home 时,watch 也能侦测到。
- 路由 undefined -> Home
- 接口获取到菜单数据
所以 1 先满足的时候,路由跳转在 2;反之 2 先满足的时候,路由跳转在 1。