返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue如何实现页面状态保持页面间数据传输
  • 149
分享到

Vue如何实现页面状态保持页面间数据传输

2024-04-02 19:04:59 149人浏览 八月长安
摘要

这篇文章主要为大家展示了“Vue如何实现页面状态保持页面间数据传输”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现页面状态保持页面间数据传输”这篇文

这篇文章主要为大家展示了“Vue如何实现页面状态保持页面间数据传输”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现页面状态保持页面间数据传输”这篇文章吧。

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)

<template>
 <group title="模拟手机号充值 - 堆栈底-第一页" label-width="5em" class="bottom-group">
  <box gap="10px 10px">
   <x-input title="手机号" v-model="dataParams.phoneNumb"></x-input>
  </box>
  <box gap="10px 10px">
   <x-button plain @click.native="submit()">点击充值</x-button>
   <x-button plain @click.native="modify()">修改参数栈内参数对象</x-button>
  </box>
 </group>
</template>

<script type="text/ecmascript-6">
import demoMixin from '../demo-mixin'
import { XInput } from 'vux'
// 1.参数栈模块提供的一个**混入**组件,方便页面组件简化参数栈的api操作和开发,详见下面的`paramsStack mixin`说明
import { paramsStack } from 'vue-viewplus'

export default {
 // 2.使用`paramsStack mixin`
 mixins: [paramsStack, demoMixin],
 components: {
  XInput
 },
 data() {
  return {
   // 3.【可选】`paramsStack mixin`中定义的`data`属性,声明当前页面组件是参数栈的栈底,当当前页面被点击返回弹出的时候,插件会检测这个属性,如果为true,就清空参数栈
   // isStackBottom: true,
   // 4.自定义需要传递到下一个页面的参数
   dataParams: {
    phoneNumb: ''
   }
  }
 },
 methods: {
  submit() {
   this.$vp.psPageNext('/Demo/PageStack/Page2', {
    params: this.dataParams
   })
  }
 },
 created() {
  // 【可选】类似第三步
  // this.isStackBottom = true
  // 5.解析回传参数
  if (!_.isEmpty(this.backParams)) {
   this.dataParams.phoneNumb = this.backParams.phoneNumb
   this.$vp.toast(`通过 backParams.phoneNumb 预填写页面`)
  }
 }
}
</script>

表单确认页面(简称:Page2)
<template>
 <group label-width="15em" class="bottom-group">
  <fORM-preview header-label="请确认订单信息" :body-items="list" ></form-preview>
  <x-input title="请输出充值金额" v-model="dataParams.amount" ></x-input>
  <box gap="10px 10px">
   <flexbox>
    <flexbox-item>
     <x-button type="default" @click.native="replace()">确认</x-button>
    </flexbox-item>
    <flexbox-item>
     <x-button type="default" @click.native="bck()">返回(回传参数)</x-button>
    </flexbox-item>
   </flexbox>
  </box>
 </group>
</template>

<script type="text/ecmascript-6">
import demoMixin from '../demo-mixin'
import { paramsStack } from 'vue-viewplus'
import { XInput, FormPreview, Flexbox, FlexboxItem } from 'vux'

export default {
 mixins: [paramsStack, demoMixin],
 components: {
  FormPreview,
  Flexbox,
  FlexboxItem,
  XInput
 },
 data() {
  return {
  // 1. 回显上一个页面录入的手机号
   list: [
    {
     label: '手机号',
     value: ''
    }
   ],
   // 2. 自定义需要传递到下一个页面的参数
   dataParams: {
    phoneNumb: '',
    amount: '50元'
   }
  }
 },
 methods: {
  
  replace() {
   this.$vp.psPageReplace('/Demo/PageStack/Page4', {params: this.dataParams})
  },
  bck() {
   this.$vp.psPageGoBack({
    // 3.设置回传参数
    backParams: {
     phoneNumb: '13222222222'
    }
   })
  }
 },
 created() {
  this.list[0].value = this.params.phoneNumb
  this.dataParams.phoneNumb = this.params.phoneNumb
 }
}
</script>

表单结果页面(简称:Page4)
<template>
 <div>
  <msg title="操作成功" :description="description" :buttons="buttons"></msg>
 </div>

</template>

<script type="text/ecmascript-6">
 import demoMixin from '../demo-mixin'
 import { paramsStack } from 'vue-viewplus'
 import { FormPreview, Msg } from 'vux'

 export default {
  mixins: [paramsStack, demoMixin],
  components: {
   FormPreview,
   Msg
  },
  data() {
   return {
    description: '',
    buttons: [{
     type: 'primary',
     text: '在做一笔',
     onClick: ((that) => {
      return () => {
       // 返回栈顶页面
       that.$vp.psPageGoBack()
      }
     })(this)
    }, {
     type: 'default',
     text: '完成',
     onClick: ((that) => {
      return () => {
       // 返回指定页面,并清空参数栈
       // that.$vp.psPageGoBack({
       //  backPopPageNumbs: -2,
       //  clearParamsStack: true
       // })
       that.$vp.psPageNext('/Demo', {
        clearParamsStack: true,
        backState: true
       })
      }
     })(this)
    }]
   }
  },
  created() {
   this.description = `${this.params.phoneNumb} 成功充值 ${this.params.amount}`
  }
 }
</script>

paramsStack mixin

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


export const paramsStackMixin = {
 data() {
  return {
   
   isStackBottom: false
  }
 },
 computed: {
  ...mapGetters([
   
   'params'
  ]),
  
  backParams() {
   return this.$store.state[MODULE_NAME].backParams
  },
  
  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


 restoreParamsStack()

psModifyBackState


 psModifyBackState(bckState)

psClearParamsStack


 psClearParamsStack()

psPageNext


 psPageNext(location, {params = {}, clearParamsStack = false, backState = false} = {})

psPageReplace


 psPageReplace(location, {params = {}, isPop = true} = {})

psPageGoBack


 psPageGoBack({backParams = {}, clearParamsStack = false, backPopPageNumbs = -1} = {})

以上是“Vue如何实现页面状态保持页面间数据传输”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: Vue如何实现页面状态保持页面间数据传输

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

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

猜你喜欢
  • Vue如何实现页面状态保持页面间数据传输
    这篇文章主要为大家展示了“Vue如何实现页面状态保持页面间数据传输”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现页面状态保持页面间数据传输”这篇文...
    99+
    2024-04-02
  • vue页面状态持久化怎么实现
    本篇内容介绍了“vue页面状态持久化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求:左树右表。组织树选中某一节点后,进入详情页面...
    99+
    2023-06-21
  • Vue项目如何保持用户登录状态(localStorage+vuex刷新页面后状态依然保持)
    目录前言一、实现效果二、实现步骤及涉及要点三、涉及代码总结前言 在前端项目开发中,实现用户的登陆注册功能时常常会有一个问题,那就是我们设置的登录状态,在浏览器页面刷新后就消失了,这其...
    99+
    2024-04-02
  • 如何使用layer.open子页面弹出层向父页面传输数据
    这篇文章给大家分享的是有关如何使用layer.open子页面弹出层向父页面传输数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。子页面向父页面传数据...
    99+
    2024-04-02
  • ASP.NET中怎么实现页面间数据传递
    ASP.NET中怎么实现页面间数据传递,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、ASP.NET页面间数据传递的各种方法和分析1 使用Querystring 方法Qu...
    99+
    2023-06-17
  • Vue通过路由实现页面间参数的传递
    目录在Vue项目开发中,页面之间传递参数有很多种方法1.路由传递2.sessionStorage/localStorage缓存的形式进行传递3.父子组件之间的传值 4.使用...
    99+
    2023-05-17
    vue路由实现页面参数传递 vue页面参数传递 vue路由参数传递
  • react如何实现跳转前记住页面状态
    这篇文章主要介绍了react如何实现跳转前记住页面状态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react如何实现跳转前记住页面状态文章都会有所收获,下面我们一起来看看吧。react实现跳转前记住页面状态的...
    99+
    2023-07-04
  • Vue路由返回恢复页面状态怎么实现
    本文小编为大家详细介绍“Vue路由返回恢复页面状态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue路由返回恢复页面状态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • vue如何实现登陆页面
    这篇文章主要介绍“vue如何实现登陆页面”,在日常操作中,相信很多人在vue如何实现登陆页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何实现登陆页面”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-30
  • 微信小程序页面间如何传递数据
    微信小程序页面间实现传递数据的几种方法使用url通过option获取值//定义url,并赋值wx.navigateTo({url: 'testid=1'})//使用option获取值url的值Page({data:{id:'',},onLo...
    99+
    2024-04-02
  • vue中modal传输数据并刷新部分页面数据方式
    目录modal传输数据刷新部分页面数据vue中modal数据管理完全不封装的Modal代码示例将Modal及其数据封装成组件将Modal数据进行完全封装modal传输数据刷新部分页面...
    99+
    2024-04-02
  • 小程序如何实现页面之间的传参
    使用url带参数传递数据代码实现:toSomeone: function (event) {wx.navigateTo({url: 'some/someid=' + ...
    99+
    2024-04-02
  • 微信小程序如何实现页面间传值
    这篇文章主要介绍“微信小程序如何实现页面间传值”,在日常操作中,相信很多人在微信小程序如何实现页面间传值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序如何实现页面间传值”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-14
  • AngularJS如何实现跨页面传值
    这篇文章主要介绍了AngularJS如何实现跨页面传值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用的ionic这里使用ui-router...
    99+
    2024-04-02
  • 实现PHP页面跳转时如何传递POST数据
    实现PHP页面跳转时如何传递POST数据 在开发PHP应用程序时,有时候我们需要在页面跳转时传递POST数据,这可能涉及到一些敏感信息或者需要在跳转后进行处理的数据。在这种情况下,我们...
    99+
    2024-04-02
  • 微信小程序中页面间如何实现传值与页面取值操作
    小编给大家分享一下微信小程序中页面间如何实现传值与页面取值操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:微信小程序...
    99+
    2024-04-02
  • JSP中怎么实现页面间传递参数
    JSP中怎么实现页面间传递参数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。(1)直接在URL请求后添加如:< a href="thexuan.jspact...
    99+
    2023-06-17
  • vue如何实现本项目页面之间跳转
    目录本项目页面之间跳转方式在template模板中添加在methods中写入路径修改路由文件vue解决页面跳转问题解决办法本项目页面之间跳转方式 在template模板中添加 but...
    99+
    2024-04-02
  • webpack+vue+node如何实现单页面
    这篇文章主要介绍webpack+vue+node如何实现单页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.node下载地址:http://nodejs.cn/download/...
    99+
    2024-04-02
  • SpringMVC数据页响应ModelAndView如何实现页面跳转
    这篇文章主要介绍“SpringMVC数据页响应ModelAndView如何实现页面跳转”,在日常操作中,相信很多人在SpringMVC数据页响应ModelAndView如何实现页面跳转问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作