一、问题场景描述
1:进入列表页,点击内容A详情,跳转到内容A详情页(this.$router.push(path: `内容A的url/${内容A的id}`})
)
2:返回列表页,点击内容B详情,跳转到内容B详情页(this.$router.push(path: `内容A的url/${内容B的id}`})
)
问题:此时,url中的参数不一样,但是新打开的内容B的tag页面中的内容,依旧是内容A的内容(读取了history缓存的界面状态的数据)
二、解决方法1
可以在离开上一个内容详情页时,销毁掉当前组件
// 导航离开该组件的对应路由时调用[可以访问组件实例 `this`]
beforeRouteLeave (to, from, next) {
// 销毁组件,避免通过vue-router再次进入时,仍是上次的history缓存的状态
this.$destroy(true)
next()
},
三、解决方法2
或者,可以在路由更新之前,对数据进行一次调用获取(一般里面的语句和beforeRouteEnter
的一样)
弊端:无法对一些需要加载dom的控件,会报错,比如说echarts
beforeRouteEnter(to, from, next) { //路由加载前
next(vm => {
vm.debugtalk_id = vm.$router.currentRoute.params.id;;
vm.getCode();
});
next()
},
beforeRouteUpdate(to, from, next) {
// 路由在同组件之间更新之前被调用
this.debugtalk_id = vm.$router.currentRoute.params.id;;
this.getCode();
next()
},
网友评论