重定向后页面回退反复跳转bug
问题 在网易云项目时,由于Api所返回数据的问题,在Video搜索界面出现Mv的结果,这样就导致当点击的视频为Mv时,无法在Video页面利用传入的id参数渲染Video
解决办法 想到利用判断,在得到MV之后跳转到MV播放界面,也即重定向redirect:
this.$router.push({ name: 'MvPlay', query: { id: this.id, } }) 但是,这就出现了页面回退之后又前进这样反复的BUG,于是想到replace,修改为:
this.$router.replace({ name: 'MvPlay', query: { id: this.id, } }) 这样,在Video页面重定向到Mv页面后,不会留下在Video页面的历史,所以就不会出现上面的BUG了!
在网易云项目时,在歌手详情页点击相似的歌手跳转到query参数不同的另一个歌手详情页时,出现地址栏query参数变化,而页面却没有实时更新的现象,经过搜索找到以下解决方案:
方案一:watch监听路由 watch: { // 方法1 //监听路由是否变化 '$route' (to, from) { if(to.query.id !== from.query.id){ this.id = to.query.id; this.init();//重新加载数据 } } } //方法 2 设置路径变化时的处理函数 watch: { '$route': { handler: 'init', immediate: true } } 方案二:给router-view添加一个不同的key 给router-view添加一个不同的key,这样即使是公用组件,只要url变化了,就一定会重新创建这个组件。
<router-view :key="$route.fullpath"></router-view> 小洁🙎🏼♀️ 抽象问题描述:同一path的页面跳转时路由参数变化,但是组件没有对应的更新。
实际原因:主要是因为获取参数写在了created或者mounted路由钩子函数中,路由参数变化的时候,这个生命周期不会重新执行。