浅谈针对Vue相同路由不同参数的刷新问题


Posted in Javascript onSeptember 29, 2018

在使用vue和vue-router开发spa应用时,我们会遇到这样一种问题。

当页面跳转时,组件本身并没有发生改变:

// 路由映射关系'/form/:type'
// 当前页面路由/form/shop1
this.$router.push({ name: 'form', params: { type: 'shop2' })

这时我们进行路由跳转后会发现组件并没有刷新,在前一个路由组件的数据都保留了下来,这并不是我们想要的效果。

对于简单的数据更新,我们可以直接监听路由参数并重新获取路由的初始化数据即可,
但是对于有很多子组件需要初始化或者reset的情况,我们还是有必要重新执行组件的生命周期。

针对这种情况可以使用三种方式解决:

1.为相同路由页面的跳转进行中间路由替换,在router上注册beforeEach全局守卫进行拦截,跳转到一个中间路由(例如empty),再从中间过渡路由跳转至要去的路由。

// 全局导航守卫
router.beforeEach((to, from, next) => {
 if (to.name === from.name && to.params.type !== from.params.type) {
  next({ name: 'empty', query: { toPath: to.fullPath } })
 } else {
  next()
 }
})

// 中间过渡路由
let toPath = this.$route.query.toPath
if (this.toPath) {
 this.$router.push({ path: this.toPath })
}

2.使用v-if重新渲染当前页面组件

// html部分
<div>
 <router-view v-if="showRouterView"/>
</div>

// script部分
export default {
 data () {
  return {
   isRouterAlive: true
  }
 },
 methods: {
  reload () {
   this.showRouterView = false
   this.$nextTick(() => (this.showRouterView = true))
  } 
 }
}

这样把方法注册到跟组件上,对于想刷新的组件直接调用reload方法即可。

3.使用vue文档组件绑定的key值来进行强制刷新

vue文档说明了当你需要

  • 完整地触发组件的生命周期钩子
  • 触发过渡

的时候可以利用更新组件绑定的key值来完成更详细的说明

这样直接为组件绑定与路由参数关联的值即可

<MyComponent :key="routeParams" />

综合来看,第三种方式最简单,推荐使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript hasOwnProperty 方法 &amp; in 关键字
Nov 26 Javascript
JavaScript获取页面中表单(form)数量的方法
Apr 03 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
jQuery实现手机版页面翻页效果的简单实例
Oct 05 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
微信小程序checkbox组件使用详解
Jan 31 Javascript
vue-router 起步步骤详解
Mar 26 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
Feb 27 Javascript
超详细小程序定位地图模块全系列开发教学
Nov 24 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 #Javascript
详解React之key的使用和实践
Sep 29 #Javascript
vue给组件传递不同的值方法
Sep 29 #Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 #Javascript
浅谈vue项目打包优化策略
Sep 29 #Javascript
vue里input根据value改变背景色的实例
Sep 29 #Javascript
4个顶级开源JavaScript图表库
Sep 29 #Javascript
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
语义化 H1 标签
2008/01/14 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
详解angular element()方法使用
2017/04/08 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
Python调用C++程序的方法详解
2017/01/24 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
EJB面试题
2015/07/28 面试题
高中毕业自我鉴定
2013/12/13 职场文书
旅游项目开发策划书
2014/01/18 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
演讲主持词
2014/03/18 职场文书
班风学风建设方案
2014/05/06 职场文书
护士节策划方案
2014/05/19 职场文书
2014年党务工作总结
2014/11/25 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers