解决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 页面载入进度条实现代码
Feb 08 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 jQuery
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
微信小程序页面间值传递的两种方法
Nov 26 Javascript
微信小程序解除10个请求并发限制
Dec 18 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
typescript配置alias的详细步骤
Aug 12 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
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+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
nodejs实现简单的gulp打包
2017/12/21 NodeJs
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
详解Python with/as使用说明
2018/12/13 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
学校办公室主任职责
2013/12/27 职场文书
优秀教师主要事迹
2014/02/01 职场文书
学生会主席演讲稿
2014/04/25 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
办公室岗位职责
2015/02/04 职场文书
人与自然观后感
2015/06/16 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
java版 联机五子棋游戏
2022/05/04 Java/Android