小技巧-优雅实现页面刷新(vue)

开发 前端
在vue项目中使用this.$router.push()方法来跳转不同路径,如果跳转相同的路径的话会发现页面并没有刷新,而是在histry栈中添加了一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

[[387299]]

前几天项目经理提了个需求要实现点击刷新按钮实现页面的局部刷新,刷新页面使用谷歌的重新加载不是就可以了何必要去自己开发呢?结果自己尝试了一番发现只能实现全局的刷新,局部刷新还是比较捉急。

尝试

push和replace这两个都方法都是vue-router提供的api。

在vue项目中使用this.$router.push()方法来跳转不同路径,如果跳转相同的路径的话会发现页面并没有刷新,而是在histry栈中添加了一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

使用this.$router.replace()方法报错vue-router.esm.js?8aaf:2065 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location这个是由于多次访问相同路由导致路由重复。

转化

将要刷新的路由和刷新后的路由之间通过一个桥梁(作为过渡)来连接。


将路由的信息和参数全部都传给"桥梁",当其跳转的一瞬间获取到参数和路由信息跳转到原来的路由。为了让用户无感知在跳转"桥梁"路由的时候使用replace方法不会向history中添加新的记录,在跳回原路由的时候是history方法,如果路由相同会替换之前的路由,而用户在点击浏览器回退按钮的时候悄然不知做了什么。

  1. this.$router.replace({ 
  2.     path: '/redirect' + fullpath 
  3. }) 

配置路由信息

  1.     path: '/redirect/:path(.*)'
  2.     component: () => import('@/views/redirect/index'

桥梁文件

  1. <script> 
  2. export default { 
  3.   beforeCreate() { 
  4.     const { params, query } = this.$route 
  5.     const { path } = params 
  6.     this.$router.replace({ path: '/' + path, query }) 
  7.   }, 
  8.   render(h) { 
  9.     return h() 
  10.   } 
  11. </script> 

 【编辑推荐】

 

责任编辑:姜华 来源: 前端简报
相关推荐

2020-09-16 07:43:44

Vue

2015-03-26 13:14:53

javascriptjs callback实现调用

2010-10-08 12:06:40

联动菜单JavaScript

2010-01-04 14:14:43

Silverlight

2009-12-11 13:25:01

PHP页面跳转

2023-06-12 15:37:38

鸿蒙ArkUI

2020-07-22 15:15:28

Vue前端代码

2021-06-09 07:15:20

Go枚举技巧

2010-09-25 09:42:59

Java内存管理

2018-08-20 08:24:41

Docker容器命令

2010-01-18 16:41:47

VB.NET用户登录页

2010-09-09 10:15:35

DIVCSS

2021-01-21 00:06:26

vue.js语言开发

2012-03-28 14:07:47

WEBSEO

2022-01-18 10:15:18

Vue性能优化前端

2024-02-01 09:10:04

页面引导工具Vue3

2009-10-09 14:45:00

ccna小技巧ccna

2022-06-15 22:15:47

CSS视觉还原

2020-07-07 07:30:58

Vue策略模式

2017-08-01 07:31:55

Router模块化页面
点赞
收藏

51CTO技术栈公众号