iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Vue路由返回恢复页面状态怎么实现
  • 504
分享到

Vue路由返回恢复页面状态怎么实现

2024-04-02 19:04:59 504人浏览 独家记忆
摘要

本文小编为大家详细介绍“Vue路由返回恢复页面状态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue路由返回恢复页面状态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新

本文小编为大家详细介绍“Vue路由返回恢复页面状态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue路由返回恢复页面状态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

需求场景:首页搜索内容,点击跳转至详情页,页面后退返回主页,保留搜索结果。

方案:路由参数;路由守卫

需求描述

在使用 Vue 开发前端的时候遇到一个场景:在首页进行一些数据搜索,点击搜索结果进入详情页面,浏览详情页后返回主页。但这时候之前的搜索记录和翻页就消失了,用户体验不好。所以需要在返回后恢复跳转前的页面参数状态。

当然如果条件允许,最简单的办法是点击搜索结果使用新页面打开(例如百度那样)。但当前需求是一个完整的Vue开发的项目,并不是打开站外地址,而且详情的内容也不多,使用新页面不太合适(性能较差而且容易制造巨量标签页)。

这里介绍两种比较容易实现的解决方案:

  • 方案一:将搜索参数存储在路由参数(route.query)中,加载页面时根据参数搜索

优点:刷新不影响;实现简单

缺点:参数只能是基础类型、长度受限;路径看起来比较难看;只对浏览器返回有效,手动跳转回首页不行

  • 方案二:使用路由守卫钩子,在离开页面前本地存储页面参数(vuex、Local Storage 等等)

优点:参数类型长度都比较自由;路径看起来清爽美观;对任意方式返回主页都有效

缺点:需要额外进行数据存储操作,如果使用store模式或vuex则刷新页面失效

方案一:路由参数

如果参数不多,并且不介意在路径后面有一大串参数(流下强迫症的泪水),可以直接把参数放在路由路径里(比如百度就是这样:baidu.com/s?wd=abc&rsv_spt=1&rsv_iqid=0x8a76279a000e2979&...,可以看到,确实是很长的一大串)。

在点击搜索后,使用 vue router 进行跳转并传参:

// 搜索页面

search(param) {
  // 其他处理
  this.$router.push({
      name: "Index",
      query: { ...this.queryParam },	// 将对象展开为键值
  });
},

这里要注意 query 传参和 params 传参的区别:前者的参数会以 ?k1=v1&k2=v2 的形式续在路径后面,能直接在地址栏中看到,因此不受页面跳转、刷新影响;后者只在第一次跳转到对应页面时起作用,再刷新跳转就没有了。因此这里要使用 query 传参。如果把参数按照格式手动写在 path 中也是可以的,但易读性和扩展性明显更差,除非只有一两个简单参数,否则不推荐。

另外,由于这个参数是要放进路径里的,因此只能是基本类型的键值对,数组或对象不能很好地支持。如果参数简单,可以将相应的对象展开当做参数(需要保证不同对象中没有重名键),但在跳转到的搜索结果页面中读取时,就只能逐个属性的获取。

// 搜索结果页面

mounted() {
  // 区分 $route 和 $router
  if (this.$route.query.type) {
    let type = this.$route.query.type;
    let keyWord = this.$route.query.keyword;
    // ...逐一获取各个参数
    // 进行搜索操作
  } else {
    // 没有搜索参数(因为我这搜索结果和主页是同一个页面,所以有可能只是正常打开主页)
  }
},

方案二:本地存储参数

由于我这想存的参数是三个对象,展开成键值取着又太不方便,所以使用了这种方案。由于项目里本来也使用了 vuex,就顺便存在了 vuex 里面,根据实际情况存在哪儿都行。vuex 的缺点是一刷新就刷没了,对于搜索结果这种优化体验性质的功能影响不大;如果有对应需求可以存在 local storage 里面。

因为我的需求中有很多中方式改变参数,在改变时存储参数太麻烦,而且容易出错或遗漏。因此这里选择在路由跳转之前再统一存储所需参数。

Vue Router 提供了路由导航守卫系列 api 来实现相应功能,具体包括全局的前置/解析/后置守卫、路由配置守卫、组件守卫等方式。所谓”守卫“,其实相当于渲染过程中的”钩子“,与熟悉的 created, mounted 一样。

完整的导航解析流程:

  1. 导航被触发。

  2. 在失活的组件里调用 beforeRouteLeave 守卫。

  3. 调用全局的 beforeEach 守卫。

  4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。

  5. 在路由配置里调用 beforeEnter

  6. 解析异步路由组件。

  7. 在被激活的组件里调用 beforeRouteEnter

  8. 调用全局的 beforeResolve 守卫 (2.5+)。

  9. 导航被确认。

  10. 调用全局的 afterEach 钩子。

  11. 触发 DOM 更新。

  12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

显然,这里使用 beforeRouteLeave 钩子就能很好地满足要求:

// 搜索结果页面

beforeRouteLeave(to, from, next) {
  // vuex 存储操作
  this.$store.commit("updateRevert", {
    query: this.queryParam,
    page: this.pageParam,
    filter: this.filter,
  });
  next();	// 继续后续的导航解析过程
},

加载页面时检查是否有保存的参数,有的话进行相应恢复操作:

// 搜索结果页面

mounted() {
  // 判断 vuex 中是否有保存的搜索参数
  if (this.$store.state.revert) {
    const revert = this.$store.state.revert;
    this.queryParam = revert.query;
    this.pageParam = revert.page;	// 可以直接取出整个对象
    // 搜索操作
  } else {
    // 没有搜索参数(因为我这搜索结果和主页是同一个页面,所以有可能只是正常打开主页)
  }
},

读到这里,这篇“Vue路由返回恢复页面状态怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网VUE频道。

--结束END--

本文标题: Vue路由返回恢复页面状态怎么实现

本文链接: https://www.lsjlt.com/news/99060.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue路由返回恢复页面状态怎么实现
    本文小编为大家详细介绍“Vue路由返回恢复页面状态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue路由返回恢复页面状态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • Vue路由返回怎么恢复页面状态
    今天小编给大家分享一下Vue路由返回怎么恢复页面状态的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • Vue 路由返回恢复页面状态的操作方式
    这篇文章主要介绍“Vue 路由返回恢复页面状态的操作方式”,在日常操作中,相信很多人在Vue 路由返回恢复页面状态的操作方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue 路由返回恢复页面状态的操作方式...
    99+
    2023-06-20
  • Vue 路由返回恢复页面状态的操作方法
    路由参数、路由导航守卫:页面后退返回时,保留搜索结果 需求场景:首页搜索内容,点击跳转至详情页,页面后退返回主页,保留搜索结果。 方案:路由参数;路由守卫 需求描述 在使用 Vu...
    99+
    2024-04-02
  • vue-router中怎么实现单页面路由
    本篇文章给大家分享的是有关vue-router中怎么实现单页面路由,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。vue中,有一个类库叫做vue...
    99+
    2024-04-02
  • vue页面状态持久化怎么实现
    本篇内容介绍了“vue页面状态持久化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求:左树右表。组织树选中某一节点后,进入详情页面...
    99+
    2023-06-21
  • 怎么使用vue-router实现单页面路由
    这篇“怎么使用vue-router实现单页面路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用vue-router实...
    99+
    2023-07-04
  • win10主页怎么恢复初始状态?win10主页恢复初始状态步骤
    win10主页功能能让大家快速找到常用的文件,下文小编就为大家带来   Win10的“主页”功能可以让用户方便的打开常用位置,找到常用文件。但是时间一长就有可能让各种“常用文件&rdq...
    99+
    2023-06-10
    win10主页 win10 步骤 状态 主页
  • 怎么用vue实现动态路由
    这篇文章主要介绍了怎么用vue实现动态路由的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue实现动态路由文章都会有所收获,下面我们一起来看看吧。1、什么是动态路由?动态路由,动态即不是写死的,是可变的。...
    99+
    2023-07-02
  • 怎么在Vue中利用路由监听实现同页面动态加载
    怎么在Vue中利用路由监听实现同页面动态加载?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。watch: {   &nbs...
    99+
    2023-06-15
  • Vue实现路由跳转至外界页面
    目录Vue路由跳转至外界页面解决办法Vue路由跳转页面的几种方式总结Vue路由跳转至外界页面 用法 如果使用路由是在 vue 页面中来回跳转,可以使用 this.$router.pu...
    99+
    2022-12-09
    Vue路由 Vue路由跳转 Vue路由跳转页面
  • Vue路由监听实现同页面动态加载的示例
    目录场景分析 开发 总结 场景分析 在系统中一个模块有三个子模块. 业务数据中可以直接根据类型去区分这个三个子模块的归属. 通常情况下.我们是写在同一个模块中然后去选择业务类型. ...
    99+
    2024-04-02
  • vue-admin-template动态路由怎么实现
    本篇内容介绍了“vue-admin-template动态路由怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!提供登录与获取用户信息数据...
    99+
    2023-06-25
  • win10主页怎么恢复初始状态恢复刚安装时的初始状态
    win10主页怎么恢复初始状态呢win10主页功能能让大家快速找到常用的文件,下文小编就为大家带来win10主页恢复初始状态的步骤,有需要的朋友一起去了解下吧。 Win10的“主页”功能可以让用户...
    99+
    2023-06-10
    win10 主页 初始状态 初始 状态
  • VUE中怎么实现路由动态加载
    VUE中怎么实现路由动态加载,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先新建vue工程,一般我们不会特殊处理路由,但当项目页面越来越多,...
    99+
    2024-04-02
  • VUE 路由实现动态路由,轻松应对复杂应用场景
    VUE 路由是一个非常强大的路由库,它提供了丰富的功能,可以帮助我们轻松地构建单页应用。其中,动态路由是 VUE 路由的一大特色,它允许我们根据需要动态地生成路由,从而可以轻松地应对复杂应用场景。 动态路由的实现 动态路由的实现非常简单...
    99+
    2024-02-05
    VUE 路由 动态路由 路由管理 单页应用
  • vue如何实现路由根据开发状态懒加载
    小编给大家分享一下vue如何实现路由根据开发状态懒加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!路由根据开发状态懒加载1 一...
    99+
    2024-04-02
  • vue怎么一步到位实现动态路由
    今天小编给大家分享一下vue怎么一步到位实现动态路由的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先呢,先看看静态路由的配...
    99+
    2023-06-30
  • Vue如何实现页面状态保持页面间数据传输
    这篇文章主要为大家展示了“Vue如何实现页面状态保持页面间数据传输”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现页面状态保持页面间数据传输”这篇文...
    99+
    2024-04-02
  • 微信小程序怎么实现页面路由
    本文小编为大家详细介绍“微信小程序怎么实现页面路由”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现页面路由”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是路由?路由(routing)是指分组...
    99+
    2023-06-30
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作