浅谈针对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 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
JavaScript 继承详解(一)
Jul 13 Javascript
纯js实现背景图片切换效果代码
Nov 14 Javascript
JavaScript里实用的原生API汇总
May 14 Javascript
DWR中各种java方法的调用
May 04 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
May 12 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
javascript填充默认头像方法
Feb 22 Javascript
Vue 项目代理设置的优化
Apr 17 Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 Javascript
vue的列表交错过渡实现代码示例
May 05 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 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
多文件上载系统完整版
2006/10/09 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python实现去除代码前行号的方法
2015/03/10 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
运动会邀请函范文
2014/01/31 职场文书
绿色城市实施方案
2014/03/19 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
搞笑老公保证书
2015/02/26 职场文书
结婚典礼主持词
2015/06/29 职场文书
Python基础之Socket通信原理
2021/04/22 Python