解决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中的val()示例应用
Feb 26 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
Aug 18 Javascript
Bootstrap 填充Json数据的实例代码
Jan 11 Javascript
js简易版购物车功能
Jun 17 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
JS 数组随机洗牌的实例代码
Sep 12 Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
JS实现简单打字测试
Jun 24 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
基于Cesium绘制抛物弧线
Nov 18 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实现邮件群发的源码
2013/06/18 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
Python中list初始化方法示例
2016/09/18 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
大学生创业策划书
2014/02/02 职场文书
自主招生自荐信指南
2014/02/04 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2015年征兵工作总结
2015/07/23 职场文书
吃通javascript正则表达式
2021/04/21 Javascript