解决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 框架使用教程 AJAX篇
Oct 11 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
全站最详细的Vuex教程
Apr 13 Javascript
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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 循环列出目录内容的函数代码
2010/05/26 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
python字符串循环左移
2019/03/08 Python
pytorch之添加BN的实现
2020/01/06 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
python实现图像拼接功能
2020/03/23 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
化学教学随笔感言
2014/02/19 职场文书
前处理班长职位说明书
2014/03/01 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
导游词之张家界
2019/10/31 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers