解决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 相关文章推荐
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
jquery 遍历数组 each 方法详解
May 25 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
bootstrap Table实现合并相同行
Jul 19 Javascript
Vue退出登录时清空缓存的实现
Nov 12 Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 Javascript
react项目从新建到部署的实现示例
Feb 19 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 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
javascript document.images实例
2008/05/27 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
javascript this详细介绍
2016/09/19 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
vue实现通讯录功能
2018/07/14 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
python简单程序读取串口信息的方法
2015/03/13 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python斐波那契数列的计算方法
2018/09/27 Python
在python里面运用多继承方法详解
2019/07/01 Python
浅析python内置模块collections
2019/11/15 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
在校硕士自我鉴定
2014/01/23 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
保留意见审计报告
2015/06/05 职场文书
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android