如何处理vue router 路由传参刷新页面参数丢失

 更新时间:2021年05月12日 09:35:34   作者:sugar_coffee  
这篇文章主要介绍了如何处理vue router 路由传参刷新页面参数丢失,对vue感兴趣的同学,可以参考下

概述

常见场景:点击列表的详情,跳转到详情内页,在内页根据传递的参数获取详情数据。

路由传参一般有如下几种方式,下面主要介编程式导航 router.push 的传参方式:

方法一:通过 params 传参

路由配置如下:

{ 
    path: '/detail/:id',  //若id后面加?代表这个参数是可选的
    name: 'detail', 
    component: Detail 
}

通过 $router.push 中 path 携带参数的方式

// 列表中的传参
goDetail(row) {
    this.$router.push({
        path: `/detail/${row.id}`
    })
}

// 详情页获取参数
this.$route.params.id

通过 $router.push 的 params 传参

// 列表页传参
goDetail(row) {
    this.$router.push({
        name: 'detail',
        params: {
            id: row.id
        }
    })
}

// 详情页获取
this.$route.params.id

注:这种方式的传参,路径用 name,路径用 name,路径用 name , 用 path 会获取不到;如果在路由配置中没有添加 /:id即 path: 'detail',url 中不会显示 id,在详情页还是可以拿到参数 id,但刷新后参数丢失。

以上这两种方式,传递的参数 id 会在 url 后面显示,如图:

传递的参数会暴露在网址中。

如果在路由中设置了params参数 /:id,但是在跳转的时候没有传递参数,会导致页面没有内容或跳转失败,可在后面加 ?代表这个参数是可选的,即 /:id?

方法二:通过 query 传参

// 路由配置
{ 
    path: '/detail', 
    name: 'detail', 
    component: Detail 
}

// 列表页
goDetail(row) {
    this.$router.push({
        path: '/detail',
        query: {
            id: row.id
        }
    })
}

// 详情页
this.$route.query.id

注:这种方式传递的参数会在地址栏的 url 后面显示 ?id=?,类似于 get 传参;query 必须配合 path 来传参。

传递的参数是对象或数组

还有一种情况就是,如果通过 query 的方式传递对象或数组,在地址栏中会被强制转换成 [object Object],刷新后也获取不到对象值。

此时可以通过 JSON.stringify() 方法将要传递的参数转换为字符串传递,在详情页再通过 JSON.parse() 转换成对象。

let parObj = JSON.stringify(obj)
this.$router.push({
    path: '/detail',
    query: {
        'obj': parObj
    }
})

// 详情页
JSON.parse(this.$route.query.obj)

这个方法虽然可以传递对象,若数据少还好,数据多的话地址栏就很长了

注意:在所有的子组件中获取路由参数是 $route不是 $router

以上 params 和 query 传参方式对比:

  • 通过 $router.push 的 params + name 传参,若路由中没有设置params参数,参数不会拼接在路由后面,但是页面刷新参数会丢失。
  • 通过 $router.push 中 path 携带参数或通过 query 传参,参数会拼接在地址后面,会暴露信息。

方法三:使用 props 配合组件路由解耦

// 路由配置
{ 
    path: '/detail/:id',
    name: 'detail', 
    component: Detail,
    props: true // 如果props设置为true,$route.params将被设置为组件属性
}

// 列表页
goDetail(row) {
    this.$router.push({
        path: '/detail',
        query: {
            id: row.id
        }
    })
}

// 详情页
export default {
    props: {
        // 将路由中传递的参数id解耦到组件的props属性上
        id: String
    },
    mounted: {
        console.log(this.id)
    }
}

此外,还可以通过把参数存在 sessionStorage 或 localStorage 中来解决页面刷新参数丢失的问题,具体结合实际项目即可。

以上就是如何处理vue router 路由传参刷新页面参数丢失的详细内容,更多关于vue的资料请关注脚本之家其它相关文章!

相关文章

  • element-UI el-table树形数据 修改小三角图标方式

    element-UI el-table树形数据 修改小三角图标方式

    这篇文章主要介绍了element-UI el-table树形数据 修改小三角图标方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Vue快速理解事件绑定是什么

    Vue快速理解事件绑定是什么

    一般在vue项目开发中,事件的处理逻辑一般很复杂,我们可以将处理的逻辑变成函数,在vue开发中,一般使用的是使用的是v-on指令进行事件的监听,事件监听的过程中触发相应的JavaScript代码
    2022-08-08
  • vue-video-player 播放m3u8视频流的实现

    vue-video-player 播放m3u8视频流的实现

    本文主要介绍了vue-video-player 播放m3u8视频流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • vue 踩不完的异步之坑及解决

    vue 踩不完的异步之坑及解决

    这篇文章主要介绍了vue 踩不完的异步之坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 如何使用Gitee Pages服务 搭建Vue项目

    如何使用Gitee Pages服务 搭建Vue项目

    这篇文章主要介绍了如何使用Gitee Pages服务 搭建Vue项目,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue-axios-post数据后端接不到问题解决

    Vue-axios-post数据后端接不到问题解决

    这篇文章主要介绍了Vue-axios-post数据后端接不到问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Vue项目中数据的深度监听或对象属性的监听实例

    Vue项目中数据的深度监听或对象属性的监听实例

    这篇文章主要介绍了Vue项目中数据的深度监听或对象属性的监听实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue3如何理解ref toRef和toRefs的区别

    Vue3如何理解ref toRef和toRefs的区别

    本文主要介绍了Vue3如何理解ref toRef和toRefs的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Vue3 setup 的作用实例详解

    Vue3 setup 的作用实例详解

    setup 用来写组合式 API,从生命周期的角度,相当于取代了 beforeCreate(),这篇文章主要介绍了Vue3 setup 的作用,需要的朋友可以参考下
    2022-12-12
  • vue如何使用mapbox对当前行政区划进行反选遮罩

    vue如何使用mapbox对当前行政区划进行反选遮罩

    这篇文章主要介绍了vue如何使用mapbox对当前行政区划进行反选遮罩问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论