热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue页面状态管理与跨页面数据传递的有效策略

在Vue应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍VueRouter提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。

如果大家觉得有用,更多的模块请 点击查看

vue router给我们提供了两种页面间传递参数的方式:

  • 动态路由匹配
  • 编程式的导航
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

下面介绍一下 vue-viewplus 一个简化Vue应用开发的 工具 库 中的参数栈模块params-stack.js:

该插件为Vue实例提供了一个 $vp 属性,模块提供了一系列api,来做自己的页面参数方式:

// 跳转页面,并传递参数
this.$vp.psPageNext('/Demo/PageStack/Page2', {
  params: {
    phoneNumb: '15111111111'
  }
})

这一点和vue router给我们提供的传递方式类似,并且目前还不支持 query: { plan: 'private' } 传递url参数,但是我们为什么还要做这个模块:

  • 提供一个 来管理栈内所有页面的参数,方便页面在回退的时候,拿到对应页面的 缓存参数 ;即一般我们使用vue router的时候每个页面的参数(除了使用url参数),在做统一返回键处理的时候,都不太方便进行页面状态恢复,而如果我们提供了一个栈,在页面入栈的时候,将当前页面的参数存储,在下一个页面点击返回按钮回到当前页面的时候我们再从参数栈恢复参数,这样就能实现客户端开发中具有的这一特性;
  • 该参数栈也支持缓存->自动恢复,vuex state和session storage两级存储保证参数栈不会被页面刷新而导致页面参数丢失
  • 也为了统一编程方式

并且,当前模块提供的参数传递方式,和vue router给我们提供了两种页面间传递参数的方式, 并不冲突 ,可以互补使用。

只不过目前插件的参数栈并没有管理vue router帮我们传递的参数;

vuex state 参数栈存储示例:

Vue 页面状态保持页面间数据传输的一种方法

session storage 参数栈二级存储示例:

Vue 页面状态保持页面间数据传输的一种方法

示例

模拟一个简单表单提交流程

Vue 页面状态保持页面间数据传输的一种方法

图 详见源码 example 项目中当前模块示例

  • 表单录入页面(简称:Page1)



  • 表单确认页面(简称:Page2)



  • 表单结果页面(简称:Page4)



paramsStack mixin

以上3个页面都集成了 paramsStack mixin ,定义如下:

/**
 * 参数栈mixin对象
 * 

* 方便页面组件继承之后操作参数栈 * @type {Object} */ export const paramsStackMixin = { data() { return { /** * 声明该页面是栈底部 */ isStackBottom: false } }, computed: { ...mapGetters([ /** * 查看`vuex#vplus.paramsStack[top-length]`栈顶参数 */ 'params' ]), /** * 查看`vuex#vplus.backParams`回传参数 */ backParams() { return this.$store.state[MODULE_NAME].backParams }, /** * 查看`vuex#vplus.backState`是否是出栈|是否是返回状态 */ backState() { return this.$store.state[MODULE_NAME].backState } }, methods: { ...mapMutations([ /** * 入栈 */ 'pushParams', /** * 修改栈顶参数 */ 'modifyParams', /** * 出栈 */ 'popParams', /** * 清空参数栈 */ 'clearParamsStack', /** * 设置是否是出栈|是否是返回状态(点击返回页面) */ 'setBackState' ]) }, // 导航离开该组件的对应路由时调用 beforeRouteLeave(to, from, next) { if (this.backState && this.isStackBottom) { this.clearParamsStack() } next() } }

配置

没有个性化配置,可以查看全局通用配置

API接口

restoreParamsStack

/**
   * $vp.restoreParamsStack()
   * 恢复插件中`vuex#$vp.paramsStack` && vuex#$vp.backParams` && vuex#$vp.backState`参数栈所用状态
   * 

* 在当前模块重新安装的时候,一般对应就是插件初始化和页面刷新的时候 */ restoreParamsStack()

psModifyBackState

/**
   * $vp.psModifyBackState(bckState)
   * 

* 设置`vuex#vplus.backState`返回状态 * @param {Boolean} [backState=false] */ psModifyBackState(bckState)

psClearParamsStack

/**
   * $vp.psClearParamsStack()
   * 

* 清空参数栈 */ psClearParamsStack()

psPageNext

/**
   * $vp.(location[, {params = {}, clearParamsStack = false, backState = false} = {}])
   * 

* 页面导航 * @param location router location对象 * @param {Object} [params={}] 向下一个页面需要传递的参数 * @param {Boolean} [clearParamsStack=false] 在进行页面导航的时候,是否清空参数栈,默认为false * @param {Boolean} [backState=false] 设置`vuex#vplus.backState`返回状态,默认为false */ psPageNext(location, {params = {}, clearParamsStack = false, backState = false} = {})

psPageReplace

/**
   * $vp.(location[, {params = {}, isPop = true} = {}])
   * 

* 页面导航(基于Router),移除上一个页面 *

* 将会出栈顶对象,并重新设置`params`为参数栈的栈顶参数 * 注:在调用该方法的页面,必须是要调用`ParamsStack#psPageNext`导航的页面,因为需要保证“弹栈”操作无误, * 又或者设置`isPop`为false * @param location router location对象 * @param {Object} [params={}] 向下一个页面需要传递的参数 * @param {Boolean} [isPop=false] 是否pop当前页面的参数后在进行页面跳转,默认为true,防止当前页面 * 不是通过`ParamsStack#psPageNext`导航过来的,但是由需要使用当前方法 */ psPageReplace(location, {params = {}, isPop = true} = {})

psPageGoBack

/**
   * $vp.psPageGoBack({backParams = {}, clearParamsStack = false, backPopPageNumbs = -1} = {})
   * 

* 页面回退 * @param {Object} backParams 设置回传参数 * @param {Boolean} clearParamsStack 是否清空参数栈 * @param {Number} backPopPageNumbs 出栈页面数 */ psPageGoBack({backParams = {}, clearParamsStack = false, backPopPageNumbs = -1} = {})


以上所述就是小编给大家介绍的《Vue 页面状态保持页面间数据传输的一种方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 在Java编程中,为了提高代码的可读性和执行效率,建议优先使用局部变量来存储方法的返回值,而不是多次调用同一个方法。这样不仅可以减少方法调用的开销,还能避免潜在的性能问题。此外,使用局部变量还可以增强代码的可维护性和调试便利性。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
author-avatar
酒梦初醒_179
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有