解决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 options属性集合操作代码
Dec 28 Javascript
js动态生成指定行数的表格
Jul 11 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
Bootstrap 源代码分析(未完待续)
Aug 17 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
微信小程序自定义tab实现多层tab嵌套功能
Jun 15 Javascript
基于JavaScript实现每日签到打卡轨迹功能
Nov 29 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
layui--select使用以及下拉框实现键盘选择的例子
Sep 24 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 27 Javascript
js仿淘宝放大镜效果
Dec 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入门小知识
2008/03/24 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Shell编程面试题
2016/05/29 面试题
自我评价200字分享
2013/12/17 职场文书
学生喝酒检讨书
2014/02/06 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
岗位明星事迹材料
2014/05/18 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
毕业证明模板
2015/06/19 职场文书