项目场景:
如图所以:
点击后,调到B页面
【理想状态:】
【bug状态:即—— 再从A到B, 参数还是没变化,虽然URL的参数已经变化了 】
原因分析:
出现这种情况后,首先要明确自己debug的思路 一步一步来分析
首先看看代码有没有问题
【A页面 传参 ——无异常,排除 】
handleGoDet(row){
this.$router.push({
path:'/Home/taskList',
query:{
task_name:row.task_name
}
})
},
【B页面 接收 参数 】
mounted(){
let val = this.$route.query.task_name
// console.log(val); B页面渲染完成后 val能打印出来 说明确实传过来了 URL也是最好的佐证
if(val){
this.params.work_name = val 这里是把 传过来的值 赋值给 后端规定的字段上面
this.handleInit() 再 初始化一下,重新获取tableData的数据
}else{
this.selectData.work_name = ""
this.handleInit()
}
},
看着也没问题啊,
再接着排除~~
【怀疑一】
起初 我以为是 created 和mounted 发请求有差别???
于是我用created 再试了一下,也没解决,
vue 应该在哪个生命周期 请求数据
看了下,保险一点的话,created ,但是 mounted里面绝对没问题啊
所以不是这个问题。。。。。
【怀疑二】
我当时挺奇怪的,URL上面参数都过来了,为啥不给我重新刷新数据,
于是我按了一下F5,结果 对了, 页面正常了,参数正常,查询结果正常!!!!
细心的你可能已经闻到了一丝真相的味道,
貌似,它给我保存了上一次的 组件状态和数据
难道是? keep-alive?
wdtmd,还真是!!
还真被 它上了一课,
我在 router-view 外面套了一层 keep-alive ,哎
总结:
来,有时间一起学一下
Vue中keep-alive的深入理解和使用