• Vue-Router实现带参数跳转,并且保存原页面数据记录


    摘要:Vue项目中有个小需求,从A页面带多个参数跳转到B页面,B页面使用出入参数查询并显示,同时再次切换到A页面时依然记忆原有的数据。

            Vue-Router实现路由带参数跳转,有多种可行方式,简单记录下这几种方案的使用和特点:

    1. Vue-Router带参数跳转

    1.1 动态路由

            使用动态路由可以在路由配置中定义带参数的路由,参数会作为路由路径的一部分,直接体现在 URL 中。

    1. // 1.路由配置文件中 配置动态路由
    2. { path: '/user/:id', name: 'User', component: User }
    3. // 2.跳转到动态路由
    4. this.$router.push('/user/123');
    5. // 3.跳转后页面获取参数
    6. this.$route.params.id
    1.2 query属性传值

            使用query属性传值可以在路由跳转时通过 URL 查询字符串传递参数,适用于需要传递较多参数或不希望将参数直接暴露在 URL 中的场景。

    1. // 1.路由配置文件中 配置动态路由
    2. { path: '/user', name: 'User', component: User }
    3. // 2.跳转时
    4. this.$router.push({ **path: '/user'**, query: { id: 123 } });
    5. // 3.跳转后页面获取参数对象
    6. this.$route.query
    1.3 params属性传值(与query属性传值类似)
    1. // 1.路由配置文件中 配置动态路由
    2. { path: '/user', name: 'User', component: User }
    3. // 2.跳转时
    4. this.$router.push({ **name: 'User'**, params: { id: 123 } });
    5. // 3.跳转后页面获取参数对象
    6. this.$route.params

            上述三中参数传递方式区别:

    • 通过动态路由和query属性传值获取参数,页面刷新参数不会丢失, 但params传值会丢失 ;
    • 动态路由一般用来传一个参数时居多, 而query、params可以传递一传递多个参数 。

            综上此处,使用query属性传值实现,至于保存跳转前的页面直接使用sessionStotage保存。

    2. 功能实现

            具体实现如下:首先,在A页面触发跳转B页面时,使用query携带多个参数,并将需要记忆的数据保存sessionStorage中。

    1. goToPageB(param1) {
    2. // 在路由跳转时传递多个参数
    3. sessionStorage.setItem('pageAData', JSON.stringify(this.queryParams));
    4. this.$router.push({
    5. path: '/real-time-monitor',
    6. query: {
    7. applianceId: param1,
    8. startTime: this.queryParams.startTime,
    9. endTime: this.queryParams.endTime
    10. }
    11. });
    12. },

            然后, B页面创建时,判断this.$route.query是否有携带数据,是则使用传入的数据,完成接口querySessionList的调用。

    1. created() {
    2. console.log('Received parameters:', this.$route.query);
    3. if (Object.keys(this.$route.query).length > 0) {
    4. this.queryParams.applianceId = this.$route.query.applianceId
    5. this.queryParams.startTime = this.$route.query.startTime
    6. this.queryParams.endTime = this.$route.query.endTime
    7. this.querySessionList()
    8. }
    9. },

            最后,为实现切换到A页面可保存状态,将跳转前保存在sessionStorage中的数据读取并使用;

    1. mounted() {
    2. if(sessionStorage.getItem('pageAData')) {
    3. this.queryParams = JSON.parse(sessionStorage.getItem('pageAData'))
    4. sessionStorage.removeItem('pageAData');
    5. }
    6. },

    推荐篇Vue Router写的挺全面的博客:

     一文详解Vue中实现路由跳转传参的4种方式(十分详尽)_vue路由跳转传参-CSDN博客

  • 相关阅读:
    如何解决前端传递数据给后端时精度丢失问题
    【C语言刷LeetCode】763. 划分字母区间(M)
    什么是并行执行 以 Aptos、Sui、Linera 和 Fuel 为例给你讲透
    Vue实现面经基础版案例(路由+组件缓存)
    redis 通信协议(RESP),最简单的应用层协议,没有之一
    易点易动RFID固定资产管理系统助力企业年终固定资产大盘点
    延迟摄影渲染工具LRTimelapse 6 为你制作出延时摄影的效果
    C++ 右值引用与一级指针
    Chromebook文件夹应用新功能
    2015架构真题(五十)
  • 原文地址:https://blog.csdn.net/weixin_61933613/article/details/136543226