vue踩坑日记之params传递参数问题

 更新时间:2023年05月17日 08:33:49   作者:闪电松鼠~  
这篇文章主要介绍了vue踩坑日记之params传递参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue踩坑之params传递参数

1.我们都知道 vue中 params传递参数都需要配置占位符 。

2.但是 一定要注意, 重点来了:

如果 /search的占位符没有值的时候, 也就是没有传递params参数时, 是无法跳转到 search组件的,路径会重新定位到 跟组件 /

3. vue 报错

vue-router] missing param for named route "search": Expected "keyword" to be defined

4. 解决方式

  在路径的占位符后面添加  一个     ?     ,  代表 这个params参数可以传递,也可以不传递。 

使用params方式传参数据丢失

在vue的组件之间传递数据时,因为不想url上面有?xx=yy的内容出现,所以选择params形式传递参数,正常跳转,好看又方便

问题出现了:突然在刷新跳转之后的页面的时候,页面的数据加载不出来了,仔细一看,原来是路由中携带的参数不见了!! 组件刷新还能导致路由的参数丢失。

Vue-router传递参数的方式说明

  • query传递参数

query传递参数不会出现路参数丢失的情况,所以不需要做其他的配置,不过缺点就是参数会拼接在url后面: url?xx=yy 这种方式来传递参数,会暴露参数,并且url也有字符上限限制

使用方式:

this.$router.push({path: 'path', query: {id:1}})

获取参数:

this.$route.query.id获取key为id的路由参数

  • params传递参数

params传递参数是将参数放在route对象中,没有放在url后面,但是会有一个问题,在跳转之后的页面中刷新的时候,会导致当前路由中保存的params的参数丢失

使用方式:

this.$router.push({name: 'name', params:{id:1}})

获取参数:

this.$route.params.id 获取route对象中的Params的参数信息

解决使用params传递参数刷新页面参数丢失

使用params传递参数,参数没有像query那样,拼接在url后面,所以刷新的时候会出现数据丢失,则无法获取到数据

有两种方式可以解决:

1.使用sessionStorage、localStorage

sessionStorage、localStorage根据具体的场景来选择,保存到里面的数据不会在刷新下的时候丢失,不过在移动端,使用微信悬浮窗的时候,部分安卓机型的sessionStorage中的数据会丢失

2.使用params中的路由匹配

使用方式: 在router.js,即匹配路由规则的位置,加上占位符即可

{
  path: '/index/:num/:name',
  name: 'index',
  component: Index
}

params中的参数名称需要和占位符的名称一致即可

获取参数,还是和获取params中参数一致:this.$route.params.name

这样的话,参数就会出现在url中,格式为:url/num/name,这种方式将参数放在url上,刷新的时候才不会丢失数据。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3父组件访问子组件方法/属性的五种方案

    Vue3父组件访问子组件方法/属性的五种方案

    在Vue3的组件化开发中,父子组件间的通信是核心功能之一,本文将详细介绍五种父组件访问子组件属性/方法的实现方案,包含最新的<script setup>语法糖实践,需要的朋友可以参考下
    2025-03-03
  • 使用Vant框架list组件遇到的坑及解决

    使用Vant框架list组件遇到的坑及解决

    这篇文章主要介绍了使用Vant框架list组件遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue3中使用ref获取dom的操作代码

    vue3中使用ref获取dom的操作代码

    ref在我们开发项目当中很重要的,在 Vue 中使用 ref 可以提高代码的可读性和维护性,因为它直接标识出了组件中需要操作的具体元素或组件实例,本文我将给大家带来的是vue3中用ref获取dom的操作,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • vue3通过父子传值实现弹框功能

    vue3通过父子传值实现弹框功能

    在Vue3中,我们可以通过 provide 和 inject 来实现父子组件之间的数据传递,这也适用于实现弹框功能,下面我们就来学习一下vue3实现弹框功能的具体方法吧
    2023-12-12
  • Vue2路由动画效果的实现代码

    Vue2路由动画效果的实现代码

    本篇文章主要介绍了Vue2路由动画效果的实现代码,可以根据不同的路径去改变动画的效果,有兴趣的可以了解一下
    2017-07-07
  • 关于element同时使用Drawer和Dialog出现多个遮罩问题

    关于element同时使用Drawer和Dialog出现多个遮罩问题

    这篇文章主要介绍了关于element同时使用Drawer和Dialog出现多个遮罩问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 一篇文章学会Vue中间件管道

    一篇文章学会Vue中间件管道

    这篇文章主要给大家介绍了如何通过一篇文章学会Vue中间件管道的相关资料,什么是中间件管道?中间件管道是一堆不同的中间件并行运行,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • Vue的方法和属性案例详解

    Vue的方法和属性案例详解

    这篇文章主要介绍了Vue的方法和属性案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Vue中computed和watch的区别

    Vue中computed和watch的区别

    在vue项目中我们常常需要用到computed和watch,那么我们究竟在什么场景下使用computed和watch呢?他们之间又有什么区别呢?本将给大家详细的介绍一下,需要的朋友可以参考下
    2023-05-05
  • Vue2和Vue3的10种组件通信方式梳理

    Vue2和Vue3的10种组件通信方式梳理

    这篇文章主要介绍了Vue2和Vue3的10种组件通信方式梳理,本文将通过选项式API 组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式,需要的朋友可以参考一下
    2022-08-08

最新评论