浅谈针对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 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
js使用ajax读博客rss示例
May 06 Javascript
js字符串操作方法实例分析
May 06 Javascript
js实现右键菜单功能
Nov 28 Javascript
使用原生的javascript来实现轮播图
Feb 24 Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 Javascript
input type=file 选择图片并且实现预览效果的实例
Oct 26 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 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
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php url路由入门实例
2014/04/23 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
跟我学Laravel之路由
2014/10/15 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python删除n行后的其他行方法
2019/01/28 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
美容师的职业规划书
2013/12/27 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
实验室的标语
2014/06/20 职场文书
自我管理的活动方案
2014/08/25 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
服务整改报告
2014/11/06 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers