解决vue更新路由router-view复用组件内容不刷新的问题


Posted in Javascript onNovember 04, 2019

本文知识点比较简单,主要面向vue新人解惑,vue前辈请忽略。

实现功能:

解决vue更新路由router-view复用组件内容不刷新的问题

见上图,这是一个产品列表,当进入不同列表时应该更新内容。

代码如下:

//router配置

{
  path: "/products/:category",
  name: "Products",
  components: {
  ...
  }
 }

//组件js配置

mounted() {
  this.getData(this.$route.params.category);
 },
 methods: {
  getData: function(category){
   this.axios.get("/products/" + category).then(res => {
 
    const data = res.data.data;
    this.pros = data.pro;
   }).catch(error => {
    console.log("error init." + error);
   });
  }
 }

目前症状:

1、点击不同类别,url有变化已正确指向不同的路由,但是内容没有更新

2、由当前类别进入其他类别路由后刷新页面,可正确获取数据

知识点

在使用Vue-router做项目时,会遇到如/serviceId/:id这样只改变id号的场景。由于router-view是复用的,单纯的改变id号并不会刷新router-view

watch 除了可以监听数据的变化,路由的变化也能被其监听到

:key vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可

针对以上,经过本人项目实践以及网友贡献,有三种方法可解决:

方法一:通过 watch 监听路由(亲测可行)

mounted() {
 this.getData(this.$route.params.category);
},
methods: {
 getData: function(category){
 ...
 }
},
watch: { //通过watch来监听路由变化
 "$route": function(){
 this.getData(this.$route.params.category);
 }
}

方法二:用 :key 来阻止“复用”

具体使用方法:

<router-view :key="key"></router-view>
 
computed: {
 key() {
 return this.$route.name !== undefined? this.$route.name +new Date(): this.$route +new Date()
 }
}

tips:使用computed属性和Date()可以保证每一次的key都是不同的,这样就可以如愿刷新数据了

方法三:通过 vue-router 的钩子函数 beforeRouteEnter beforeRouteUpdate beforeRouteLeave

computed:mapGetters([
 ...
]),
beforeRouteEnter (to, from, next) {
 // 在渲染该组件的对应路由被 confirm 前调用
 // 不!能!获取组件实例 `this`
 // 因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
 // 在当前路由改变,但是该组件被复用时调用
 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
 // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
 // 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
 // 导航离开该组件的对应路由时调用
 // 可以访问组件实例 `this`
}

本人尝试使用"beforeRouteUpdate",但位得到解决,其他方法没有尝试。

以上内容如果有错误,请各位朋友指出,谢谢。

这篇解决vue更新路由router-view复用组件内容不刷新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个JQuery操作Table的代码分享
Mar 30 Javascript
深入分析javascript中console命令
Aug 14 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
详解react-webpack2-热模块替换[HMR]
Aug 03 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
Vue的生命周期操作示例
Sep 17 Javascript
JS中FormData类实现文件上传
Mar 27 Javascript
NestJs使用Mongoose对MongoDB操作的方法
Feb 22 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 #Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 #Javascript
element-ui table组件如何使用render属性的实现
Nov 04 #Javascript
Vue 解决多级动态面包屑导航的问题
Nov 04 #Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 #Javascript
VUE+elementui面包屑实现动态路由详解
Nov 04 #Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 #Javascript
You might like
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
javascript 数组操作详解
2015/01/29 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python网络爬虫实例讲解
2016/04/28 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
有针对性的求职自荐信
2013/11/14 职场文书
房地产开发项目建议书
2014/05/16 职场文书
商务经理岗位职责
2014/08/03 职场文书
北京导游词
2015/02/12 职场文书
茶花女读书笔记
2015/06/29 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android