解决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 自动播放的实例代码
Nov 19 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
探秘vue-rx 2.0(推荐)
Sep 21 Javascript
vue实现分页组件
Jun 16 Javascript
vue的keep-alive中使用EventBus的方法
Apr 23 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
Jul 24 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 Javascript
原生js实现无缝轮播图效果
Jan 28 Javascript
javaScript Array api梳理
Mar 31 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 面向对象 final类与final方法
2010/05/05 PHP
php防止sql注入代码实例
2013/12/18 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
Django 用户认证组件使用详解
2019/07/23 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
python中添加模块导入路径的方法
2021/02/03 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
妈妈再爱我一次观后感
2015/06/08 职场文书
紧急迫降观后感
2015/06/15 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技