返回顶部
首页 > 资讯 > 前端开发 > node.js >Vue路由返回怎么恢复页面状态
  • 380
分享到

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

2024-04-02 19:04:59 380人浏览 薄情痞子
摘要

今天小编给大家分享一下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路由返回怎么恢复页面状态”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网node.js频道。

--结束END--

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

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

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

猜你喜欢
  • Vue路由返回怎么恢复页面状态
    今天小编给大家分享一下Vue路由返回怎么恢复页面状态的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • Vue路由返回恢复页面状态怎么实现
    本文小编为大家详细介绍“Vue路由返回恢复页面状态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue路由返回恢复页面状态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • Vue 路由返回恢复页面状态的操作方法
    路由参数、路由导航守卫:页面后退返回时,保留搜索结果 需求场景:首页搜索内容,点击跳转至详情页,页面后退返回主页,保留搜索结果。 方案:路由参数;路由守卫 需求描述 在使用 Vu...
    99+
    2024-04-02
  • Vue 路由返回恢复页面状态的操作方式
    这篇文章主要介绍“Vue 路由返回恢复页面状态的操作方式”,在日常操作中,相信很多人在Vue 路由返回恢复页面状态的操作方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue 路由返回恢复页面状态的操作方式...
    99+
    2023-06-20
  • win10主页怎么恢复初始状态?win10主页恢复初始状态步骤
    win10主页功能能让大家快速找到常用的文件,下文小编就为大家带来   Win10的“主页”功能可以让用户方便的打开常用位置,找到常用文件。但是时间一长就有可能让各种“常用文件&rdq...
    99+
    2023-06-10
    win10主页 win10 步骤 状态 主页
  • win10主页怎么恢复初始状态恢复刚安装时的初始状态
    win10主页怎么恢复初始状态呢win10主页功能能让大家快速找到常用的文件,下文小编就为大家带来win10主页恢复初始状态的步骤,有需要的朋友一起去了解下吧。 Win10的“主页”功能可以让用户...
    99+
    2023-06-10
    win10 主页 初始状态 初始 状态
  • vue-router中怎么实现单页面路由
    本篇文章给大家分享的是有关vue-router中怎么实现单页面路由,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。vue中,有一个类库叫做vue...
    99+
    2024-04-02
  • vue页面状态持久化怎么实现
    本篇内容介绍了“vue页面状态持久化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求:左树右表。组织树选中某一节点后,进入详情页面...
    99+
    2023-06-21
  • Vue动态路由路径重复及刷新丢失页面问题的解决
    目录Vue动态路由路径重复及刷新丢失页面1.使用router.addRoutes(teacherRouter);2.问题3.问题Vue路由动态添加重复警告重复总结Vue动态路由路径重...
    99+
    2023-01-14
    Vue动态路由路径重复 Vue刷新丢失页面 Vue动态路由
  • vue静态路由怎么写
    Vue是一款流行的JavaScript框架,它提供了一个灵活的框架,用于构建交互式、动态和可伸缩的Web应用程序。Vue Router是Vue.js官方路由管理插件,它允许您将组件映射到路由,从而实现单页应用程序 (SPA) 开发。Vue ...
    99+
    2023-05-14
  • vue返回上一页,页面样式错乱怎么办
    这篇文章主要介绍了vue返回上一页,页面样式错乱怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue项目,返回上一个,页面样式错乱,就...
    99+
    2024-04-02
  • 怎么使用vue-router实现单页面路由
    这篇“怎么使用vue-router实现单页面路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用vue-router实...
    99+
    2023-07-04
  • ASP.NET设置404页面返回302HTTP状态码的解决方法
    在配置文件中配置404页面如下: 复制代码 代码如下: <customErrors mode="On" defaultRedirect="404.aspx"> <e...
    99+
    2022-11-15
    404页面 302状态码
  • SpringBoot中怎么返回页面
    本篇文章为大家展示了SpringBoot中怎么返回页面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringBoot中使用Controller和页面的结合能够很好地实现用户的功能及页面数据的传递...
    99+
    2023-06-20
  • Vue路由this.route.push跳转页面不刷新怎么办
    本篇内容主要讲解“Vue路由this.route.push跳转页面不刷新怎么办”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue路由this.route.push跳转页面不刷新怎么办”吧!Vu...
    99+
    2023-07-04
  • 怎么在Vue中利用路由监听实现同页面动态加载
    怎么在Vue中利用路由监听实现同页面动态加载?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。watch: {   &nbs...
    99+
    2023-06-15
  • react路由返回时不刷新怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react路由返回时不刷新怎么办?react 跳转后路由变了页面没刷新的解决方案最近在学习React的过程中遇到了路由跳转后页面不刷新的问题,本文就详细的...
    99+
    2023-05-14
    React
  • 怎么用vue实现动态路由
    这篇文章主要介绍了怎么用vue实现动态路由的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue实现动态路由文章都会有所收获,下面我们一起来看看吧。1、什么是动态路由?动态路由,动态即不是写死的,是可变的。...
    99+
    2023-07-02
  • Vue路由监听实现同页面动态加载的示例
    目录场景分析 开发 总结 场景分析 在系统中一个模块有三个子模块. 业务数据中可以直接根据类型去区分这个三个子模块的归属. 通常情况下.我们是写在同一个模块中然后去选择业务类型. ...
    99+
    2024-04-02
  • Vue路由this.route.push跳转页面不刷新怎么解决
    今天小编给大家分享一下Vue路由this.route.push跳转页面不刷新怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作