解决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 相关文章推荐
JavaScript的面向对象编程基础
Aug 13 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
关于原生js中bind函数的简单实现
Aug 10 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
Angularjs 实现一个幻灯片示例代码
Sep 08 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
vue.js多页面开发环境搭建过程
Apr 24 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 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
php处理斐波那契数列非递归方法
2012/02/04 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
php获取微信openid方法总结
2019/10/10 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
JS event使用方法详解
2008/04/28 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue组件name的作用小结
2018/05/23 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
在python里面运用多继承方法详解
2019/07/01 Python
python实现操作文件(文件夹)
2019/10/31 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
蔻驰法国官网:COACH法国
2018/11/14 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
奥巴马连任演讲稿
2014/05/15 职场文书
体检通知范文
2015/04/21 职场文书
结婚典礼主持词
2015/06/29 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
python运算符之与用户交互
2022/04/13 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技