1、需求:
切换pc和移动,自动切换相应路由(pc和移动为两套页面)
2、出现的问题:
在 App.vue 中的 mounted 监听 resize 事件,屏幕变化,判断是否切换路由,pc和微信浏览器正常,但是在手机浏览器中,新网页第一次打开,会偶然性自动触发一次 resize 事件(不知道为啥会触发,肉眼也看不出来屏幕变化了),导致 获取的 路由 是 /,然后就切换相应路由错误
3、原因:
个人理解:因为还未加载完成,路由会默认返回 / 路由,所以在 App.vue 的 mounted 获取路由才不正确
其他说明:路由匹配到异步组件时,组件的可能由于各种各样的原因加载不成功,vueRouter的history下的current要保证组件加载成功才会切换状态。所以App.vue的 mounted 钩子只能获取到初始的route。
4、解决
在 App.vue 中 使用 watch 监听路由,在来监听 屏幕变化(在watch监听的路由就是正常的)
watch:{
// 因为 在 手机浏览器中,会偶然性触发 resize 事件,导致 获取路由错误,在导致切换pc移动错误
$route:{
handler(newV){
// 节流,只监听一次
if(!this.isAddList){
// 监听到路由了,才监听 resize;
window.addEventListener("resize", this.resizeFunc);
this.isAddList = true;
}
},
}
}