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.js Table 组件自定义列宽实现核心方法

    vue.js Table 组件自定义列宽实现核心方法

    这篇文章主要介绍了vue.js Table 组件自定义列宽实现核心方法,文围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • vue elementui el-form rules动态验证的实例代码详解

    vue elementui el-form rules动态验证的实例代码详解

    在使用elementUI el-form 中,对于业务不同的时候可能会产生不同表单结构,但是都是存在同一个表单控件el-form中。这篇文章主要介绍了vue elementui el-form rules动态验证的实例代码,需要的朋友可以参考下
    2019-05-05
  • vant中的Cascader级联选择异步加载地区数据方式

    vant中的Cascader级联选择异步加载地区数据方式

    这篇文章主要介绍了vant中的Cascader级联选择异步加载地区数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 浅析从vue源码看观察者模式

    浅析从vue源码看观察者模式

    本篇文章主要介绍了vue源码看观察者模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Vue3 组合式函数Composable最佳实战

    Vue3 组合式函数Composable最佳实战

    这篇文章主要为大家介绍了Vue3 组合式函数Composable最佳实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue.js集成echarts时遇到的一些问题总结

    vue.js集成echarts时遇到的一些问题总结

    这篇文章主要给大家总结介绍了关于vue.js集成echarts遇到的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 使用vue指令实现吸顶效果

    使用vue指令实现吸顶效果

    要想实现一个吸顶效果不是很难,网络上有很多教程,其中有一种就是通过fiexd加top来实现,今天突然就想做一个吸顶效果,因为最近都在用vue,所以想用vue来做一个吸顶效果的案例,感兴趣的朋友可以参考下
    2023-11-11
  • 茶余饭后聊聊Vue3.0响应式数据那些事儿

    茶余饭后聊聊Vue3.0响应式数据那些事儿

    这篇文章主要介绍了茶余饭后聊聊Vue3.0响应式数据那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • vue.js指令和组件详细介绍及实例

    vue.js指令和组件详细介绍及实例

    这篇文章主要介绍了vue.js功能介绍 - 指令,组件详细介绍及实例,详细的介绍了指令和组件的用法,有兴趣的可以了解一下。
    2017-04-04
  • vue与react详细

    vue与react详细

    react在中后台项目中由于在处理复杂的业务逻辑或组件的复用问题比vue优雅而被人认可,但也更需要团队技术整体比较给力,领头大佬的设计与把关能力要更优秀,因此开发成本更大,下面文章就来详细介绍,需要的朋友可以参考下
    2021-09-09

最新评论