解决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 相关文章推荐
JS获取scrollHeight问题想到的标准问题
May 27 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
AngularJS基础学习笔记之表达式
May 10 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
vue 项目地址去掉 #的方法
Oct 20 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
vue-列表下详情的展开与折叠案例
Jul 28 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
PHP脚本的10个技巧(2)
2006/10/09 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
深入密码加salt原理的分析
2013/06/06 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
母亲节演讲稿
2014/05/27 职场文书
庆祝儿童节标语
2014/10/09 职场文书
党员进社区活动总结
2015/05/07 职场文书
环保建议书作文300字
2015/09/14 职场文书
《火烧云》教学反思
2016/02/23 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
Django一小时写出账号密码管理系统
2021/04/29 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
mysql全面解析json/数组
2022/07/07 MySQL