路由三种传参方式

这篇具有很好参考价值的文章主要介绍了路由三种传参方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、params传参

1.1 显示参数(动态路由匹配)

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 Search组件,它应该对所有用户进行渲染,但查找的关键字不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为路径参数 。
(1)在开始传参前,需要子路由提前配置好参数。比如:keyword
ps:

  • url中的参数需要用冒号 : 表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 this.$route.params 的形式暴露出来。
  • 因为参数在url路径上显示,所以当我们刷新时,参数依旧保留
//子组件
    {
        path: '/Search/:keyword',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true }
    }

(2)传参分为声明式传参和编程式传参

声明式传参:该方式是通过 router-link 组件的to属性实现,该方法的参数可以是一个字符串路径,或者一个描述地址的对象。

//父路由组件
<router-link :to="/Search/123">进入搜索页面</router-link>

编程式传参:该方式是通过 this.$router.push属性实现。
(a)字符串的形式传参

//父路由编程式传参(一般通过事件触发)
this.$router.push({
    path:'/Search/${keyword}',
})

(b)对象形式传参(路由必须要有别名name)

//父路由编程式传参
 this.$router.push({
      name: "Search",
      params: { keyword: this.keyword },//这种方式的传参必须要有路由的别名name
   });

注意项
(1)params传参如何做到可传可不传?
在子组件的参数路径后面加上?,采用正则表达式

{
        path: '/Search/:keyword?',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true }
    }

(2)params传参如何传空字符
在父组件传参的时候,给参数加上判断。如果是空字符,则传入undefined

 this.$router.push({
        name: "Search",
        params: { keyword: this.keyword || undefined },
      });

1.2 不显示参数

注意:当params不在路由上时,参数为不可见。但是当我们刷新页面是,参数会消失。

params 传参(不显示参数)也可分为 声明式编程式 两种方式,与前面不同的是,这里是通过路由的别名 name 进行传值的,并且子路由不需要配置参数。

声明式传参:该方式是通过 router-link 组件的to属性实现,比如:

//父路由组件
<router-link :to="{name:'Search',params:{keyword:123}}">进入搜索页面</router-link>

编程式传参:该方式是通过 this.$router.push属性对象方式实现。

//父路由编程式传参
 this.$router.push({
      name: "Search",
      params: { keyword: this.keyword },//这种方式的传参必须要有路由的别名name
   });

1.3 获取传参

在子路由中可以通过下面代码来获取传递的参数值

this.$route.params.keyword

二、query传参(显示传参)

2.1 传参

**注意:query传参在路径上以?关键字=**的形式存在,刷新页面,数据保留

声明式传参:该方式是通过 router-link 组件的to属性实现,需要子路由提前配置好路由别名(name 属性)。比如:

//父路由组件
<router-link :to="{name:'Search',query:{keyword:123}}">进入搜索页面</router-link>

编程式传参:
(1)该方式是通过 this.$router.push属性对象方式实现。

//父路由编程式传参
 this.$router.push({
      name: "Search",
      query: { keyword: this.keyword },//这种方式的传参必须要有路由的别名name
   });

(2)路径传参

 this.$router.push(`/Search?k=${this.keyword}`);

2.2 获取传参

在子路由中可以通过下面代码来获取传递的参数值

this.$route.query.keyword

三、props传参(路由组件传参)

3.1、布尔模式

props设置为true时,route.params将被设置为组件的props这种情况下,只能传params参数。

//子路由
 {
        path: '/Search/:keyword?',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true },
        props: true
    }

3.2、对象模式

props是一个对象时,它将原样设置为组件props

{
        path: '/Search/:keyword?',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true },
        props: { a: 1, b: 2 } //定义a和b两个变量
    }

3.3、函数模式

你可以创建一个返回props的函数。这允许你将参数转换为其他类型,将静态值与基于路由的值相结合等等。

 {
        path: '/Search/:keyword?',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true },
        props: route => ({ k: route.query.keyword, keyword: route.params.keyword })
    }

3.4、获取参数

//首先在父路由里面设置路由跳转
this.$router.push({
        name: "Search",
        params: { keyword: this.keyword || undefined },
        query: { k: this.keyword.toUpperCase() },
      });
      
//然后给子路由的路径配置里面加上props
{
        path: '/Search/:keyword?',
        name: 'Search',
        component: () =>
            import ('../views/Search'),
        meta: { show: true },
        props: route => ({ k: route.query.k, keyword: route.params.keyword })
    }

最后我们可以在子页面中通过props获取参数
路由传参,vue从入门到入土,前端,vue.js,vue-router
结果如下:
路由传参,vue从入门到入土,前端,vue.js,vue-router文章来源地址https://www.toymoban.com/news/detail-702081.html

到了这里,关于路由三种传参方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue路由传参(六种方式)

    1.query传参:         query传参,通过get传参也就是原始传参,在path路径后面跟上?id=18name=“张三”,会传递到query里面         实例: {                 path:\\\'/home\\\'?name=\\\'张三\\\'age=18,                 component:()=import(\\\'./home.vue\\\')            }         通过$ro

    2024年02月13日
    浏览(34)
  • VUE路由传参的实用方式

    本文讲解了VUE项目中路由之间的传值方式,涉及到的方法都是开发时常用的,希望对大家有多帮助。 首先定义好路由 在需要跳转的home组件中使用 router-link 标签 在跳转到的about组件中拿到传过来的值 小结:params传参类似post,路由配置可以为  path : \\\'/about/ : id’ 或   path :

    2024年02月08日
    浏览(54)
  • 【Spring MVC】这几种传参方式这么强大,让我爱不释手,赶快与我一起去领略吧 ! ! !

    前言: 大家好,我是 良辰丫 ,在上2一篇文章中我们已经初步认识了Spring MVC,并且学习了热部署的配置,今天我们将继续开始我们的Spring MVC的学习! ! !💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤

    2024年02月08日
    浏览(44)
  • 【Vue3】路由传参的几种方式

    路由导航有两种方式,分别是:声明式导航 和 编程式导航 参数分为query参数和params参数两种 1.传参 在路由路径后直接拼接 ?参数名:参数值 ,多组参数间使用 分隔。 如果参数值为变量,需要使用模版字符串。 2.接收与使用 1.传参 to不再传递字符,而是传一个对象,由于参数

    2024年02月21日
    浏览(52)
  • 前端入门到入土?

    后序我会更新一系列的前端面试题,感兴趣的可以关注一手 http HTTP 是一种无状态协议。每个请求都是独立的,服务器不会保留任何与先前请求相关的信息。 数据传输是明文的,不进行加密。这意味着攻击者可以截获、查看和修改传输的数据。 默认使用端口80进行通信。 ht

    2024年02月10日
    浏览(32)
  • 详解axios四种传参,后端接参

    前端浏览器发送的数据 后端接参 用 @RequestBody 指定接收的是 json 格式的参数,然后参数类型是 Map类型 ,通过map的键取出数据。 后端服务器接收的数据:{aid=11} 前端浏览器发送的数据 后端接收: 用 @RequestBody 指定接收的是 json 格式的参数,然后参数可以 通过名字自动匹配

    2024年02月11日
    浏览(46)
  • postman测试常用 5种传参类型,@RequestBody、@RequestParam、@PathVariable区别

    开启自动转换JSON数据的支持 @EnableWebMVC 请求json参数: 区别: @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】 @RequestBody用于接收json数据【application/json】 应用: 发送json格式数据为主,@RequestBody 非发送json格式数据为主,@RequestParam 定义传参的日期格式

    2024年02月09日
    浏览(53)
  • react路由传参3种方式

    不管是vue还是react 无外乎就是通过 link路由跳转, 使用js传参, 或者this.props.history.push()页面跳转, 再或者是query , params 传参。 通常是把参数放在路径后边拼接。或者通过对象的方式传过去,页面进行接收。 简单说一下我们常见的方式, 最后说一下也是 比较常用的方式(

    2024年02月13日
    浏览(36)
  • 前端Vue入门-day06-路由进阶

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 路由的封装抽离 声明式导航 导航链接  两个类名  自定义高亮类名  跳转传参 1. 查询参数传参 2. 动态路由传参 两种传参方式的区别  Vue路由  重定向 404 编程式导航

    2024年02月14日
    浏览(46)
  • vue3的兄弟传参(三种方法)

    1.兄弟A先给父元素 父元素再给子组件B (vue2的思路) A组件 父组件 组件B npm install mitt 定义一个bus.js 组件A: 组件B: npm install mitt main.ts 组件A 兄弟B

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包