Vue路由传参及props解耦深入分析

 更新时间:2022年07月30日 10:51:20   作者:liyfn  
vue路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转,下面这篇文章主要给大家介绍了关于vue路由传参方式的方式总结及获取参数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

关于路由传参的几种方式,众说纷纭。今天来总结下路由传参的几种方式与路由解耦:

一、路由传参

路由传参总的来说有两种方式,query和params,配合声明式导航与编程式导航,各有不同的几种写法;

query传参

query配合声明式导航

//路由配置
 {
    path: '/a01',
    name: 'a01',
    component: a01
  }
//传参方式1--通过url拼接,使用?分割
 <router-link to="/a01?data=a01">a01</router-link>
 //传参方式2--传入对象
<router-link :to="{ path: '/a01', query: { data: 'a01' } }">a02</router-link>

query配合编程式导航

路由配置方式不变;

//绑定事件
<span @click="btn('/a01', 'a01')">b01</span>
//处理路由方式1,通过path配合query
 btn(path, data) {
      this.$router.push({
        path,
        query: {
          data,
        },
      });
    },
 //处理路由方式2,通过name配合query
    btn1(name, data) {
      this.$router.push({
        name,
        query: {
          data,
        },
      });
    },

query传参的特点

1.参数在url中展现,使用?分割。属性和值以键值对形式存在

2.子组件通过$route.query.xxx方式获取参数(xxx为自己定义的参数名)

params传参

params传参分为两种情况,路径占位与不占位

路径使用参数占位时

params配合声明式导航:

//路由声明需要使用‘:'占位
{
    path: '/a02/:data',
    name: 'a02',
    component: a02
  }
//传参方式1--url拼接,不需要?分割
<router-link to="/a02/a02">a02</router-link>
//传参方式2--传对象
<router-link :to="{ path: '/a02/a02' }">a02.1</router-link>

params配合编程式导航:

  btn1(name, data) {
      this.$router.push({
        name,
        params: {
          data,
        },
      });
    },

params传参配合路径占位的特点:

1.参数在url中展现,没有?=等额外标签

2.子组件以$route.params.xxx方式获取参数(xxx为自己定义的参数名)

路径不使用占位时

声明式导航

<router-link :to="{ name:'a02',params:{data:'a02'} }">a02.1</router-link>

注意!!需要使用name,不可以使用path,官网解释如下:

注意:如果提供了 path,params 会被忽略,你需要提供路由的 name 或手写完整的带有参数的 path

编程式导航

//路由配置
{
    path: '/a03',
    name: 'a03',
    component: a03
  }
  //路由跳转
 <span @click="btn3('a03', 'a03')">b04</span>
 btn3(name, data) {
      this.$router.push({
        name,
        params: {
          data,
        },
      });
    },

params传参占位的特点:

1.参数在不在url体现

2.刷新后数据丢失

二、props解耦

vue的组件是可以复用的,但是路由给子组件传值后,通过$route获取参数会导致子组件无法复用,解决这个问题,需要用到props解耦;

1.props布尔值

具体使用:

1.在路由配置时使用props

{
    path: '/a02/:data',
    name: 'a02',
    component: a02,
    //使用props传参
    props: true
  }

2.父组件传参,没有变化

3.子组件使用props接收

<template>
  <p>{{ data }}</p>
</template>
<script>
export default {
  props: {
    data: {
      type: String,
    },
  },
};
</script>

props为布尔值 true 开启props接收,false关闭。

上例我们演示的就是这样的情况,但是,props为布尔值时,只适用于params传参,对query不适用;

2.props函数模式

props配置为函数,可以获取query方式的传值,通过route.query.xxx方式

//配置
 {
    path: '/a01',
    name: 'a01',
    component: a01,
    props: (route) => ({ data: route.query.data })
  }
//传参--与query一致
<router-link to="/a01?data=a01">a01</router-link>
//接收
<template>
  <p>{{ data }}</p>
</template>
<script>
export default {
  props: {
    data: {
      type: String,
    },
  },
};
</script>

3.props对象模式

props对象模式直接传递固定值,不需要再传参;

//配置
 {
    path: '/a01',
    name: 'a01',
    component: a01,
    props: {data:'123'}
  }

以上,为本次分享全部内容,如有错误,欢迎随时私信指正,不胜感激。

到此这篇关于Vue路由传参及props解耦深入分析的文章就介绍到这了,更多相关Vue路由传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue如何从接口请求数据

    vue如何从接口请求数据

    本篇文章主要介绍了vue如何从接口请求数据 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • vuex实现购物车功能

    vuex实现购物车功能

    这篇文章主要为大家详细介绍了vuex实现购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • vue中watch和computed的区别详解

    vue中watch和computed的区别详解

    这篇文章主要给大家介绍了关于vue中watch和computed区别的相关资料,computed和watch都是vue框架中的用于监听数据变化的属性,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • vue2.0s中eventBus实现兄弟组件通信的示例代码

    vue2.0s中eventBus实现兄弟组件通信的示例代码

    这篇文章主要介绍了vue2.0s中eventBus实现兄弟组件通信的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Vue递归实现树形菜单方法实例

    Vue递归实现树形菜单方法实例

    学习vue有一段时间了,最近使用vue做了一套后台管理系统,其中使用最多就是递归组件,下面这篇文章主要给大家介绍了关于Vue利用递归实现树形菜单的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11
  • Vue中使用Ueditor的示例详解

    Vue中使用Ueditor的示例详解

    这篇文章主要介绍了Vue中使用Ueditor的方法,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 浅谈vue同一页面中拥有两个表单时,的验证问题

    浅谈vue同一页面中拥有两个表单时,的验证问题

    今天小编就为大家分享一篇浅谈vue同一页面中拥有两个表单时,的验证问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue3之路由跳转与参数获取方式

    Vue3之路由跳转与参数获取方式

    这篇文章主要介绍了Vue3之路由跳转与参数获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 详解关于element级联选择器数据回显问题

    详解关于element级联选择器数据回显问题

    这篇文章主要介绍了详解关于element级联选择器数据回显问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue组件为什么data必须是一个函数

    Vue组件为什么data必须是一个函数

    这篇文章主要介绍了Vue组件为什么data必须是一个函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论