兄弟组件传值

  • 兄弟组件之间彼此没有联系,它们需要通过中间Vue实例对象bus(快递员)进行数据传递。

1. 声明事件

给组件实例(或Vue实例) 声明事件有两种方式:

  1. 直接声明
  2. 通过$on实现

给组件实例声明事件:

<组件 @事件名称="事件驱动方法"></组件>

通过$on进行声明:

// 语法:
组件实例.$on(事件名称,事件驱动方法(形参,形参){})
// 例如:
// 声明事件
vm.$on('hello',function(traffic,city){console.log(`我坐着{$traffic}到达${city}城市`)})

注意:组件实例 和 vue实例 都可以调用$on。

2. 兄弟组件传值

实现步骤

  1. 定义模块 src/bus.js,内容就是导入Vue模块,并导出一个Vue实例对象:

    import Vue from 'vue'
    export default new Vue()
    
  2. 在各个兄弟组件中,导入 bus.js 模块:

    import bus from '@/bus.js'
    

    虽然bus.js被各个组件都导入,但是系统中bus只有一份。

  3. 接收数据的兄弟组件的 created 生命周期方法里(使得事件及时响应),发送数据的组件中声明

    使用 bus.$on(‘事件名称’, (接收的数据) => {}) 定义事件成员方法

    created(){// 定义事件,注意箭头函数应用bus.$on('xxx', data=>{console.log(data)})
    }
    

    xxx是事件方法的名称。data是形参,待接收数据,并且可以定义多个。

    注意:如果$on内部要使用this,请通过"箭头函数"声明方法。

  4. 发送数据的兄弟组件中,使用 bus.$emit(‘事件名称’, 要发送的数据) 来向外发送参数。

    <button @click="sendMsg">传值</button>
    export default {methods: {sendMsg(){// 触发绑定的事件,并向外传递参数。bus.$emit('xxx', '1000元保护费')}}
    }
    

第一个参数xxx 是接收数据组件给bus声明的方法。第二个参数是传递的实参数据。

说明

  1. Vue实例可以调用$on()方法进行事件方法创建

    实例.$on(名称,(形参,形参,形参……){})
    

    参数根据需要,可以是一个或多个。

  2. Vue实例可以调用$emit()方法进行事件方法执行

    实例.$emit(名称,实参,实参,实参……)
    

    参数 与 $on的形参是一一对应的。

注意

虽然各个兄弟组件针对bus.js都有做引入,系统在运行的时候只有一个bus对象,故大哥 给 bus绑定的事件方法,兄弟组件可以通过bus调用。

案例应用

兄弟组件传值

src/bus.js代码:

// 快递员,负责兄弟组件之间传递数据
import Vue from 'vue'
// 导出一个Vue对象
// 注意:这是一个新的对象,与main.js里边的没有关系
export default new Vue()

First.vue代码(created、$on设置事件方法,准备接受数据):

<template><div id="first"><h3>大哥组件</h3><span>{{dt}}</span></div>
</template><script>
// 导入bus的模块对象
import bus from '@/bus.js'export default {name: 'First',data () {return {dt: ''}},// 第一时间就把事件声明好,以便小弟调用并传递数据created () {// 实例对象.$on(事件名称,function(形参,形参){}事件事件的回调方法)// 注意:回调函数变为箭头函数,使得this可以正确使用bus.$on('jieshou', msg => {// console.log(msg)// 把数据给dt接收this.dt = msg})}
}
</script>

Second.vue代码(bus调用$emit()调动事件进行数据传递):

<template><div id="second"><h3>小弟组件</h3><button @click="back()">给大哥回话</button></div>
</template><script>
// 导入bus的模块对象
import bus from '@/bus.js'export default {name: 'Second',methods: {// 给大哥组件传值back () {// 使得bus调用自己的事件(是大哥给bus声明的)// bus.$emit(事件,参数,参数)bus.$emit('jieshou', '1000元保护费')}}
}
</script>

App.vue代码(引入、注册、使用各个兄弟组件):

<template><div id="app"><h2>App根组件</h2><first></first><second></second></div>
</template><script>
// 引入、注册、使用 两个兄弟组件
import First from './components/First.vue'
import Second from './components/Second.vue'export default {components: {First,Second}
}
</script>

Vue组件传值——兄弟组件传值相关推荐

  1. vue中,兄弟组件之间传值

    vue中,兄弟组件之间传值 项目中,需要使用多个子组件,当需要传递值的时候,较为麻烦,怎样实现呢 1.一般可以使用子组件a传递给父组件,再由父组件传递给子组件b.但是一般较为麻烦, 2.使用bus作为 ...

  2. 【Day13】说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等)

    说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等) 一.父组件向子组件传值 二.子组件向父组件传值 三.兄弟组件传值 四.跨组件 一.父组件向子组件传值 1.1 prop ...

  3. VUE 父子组件、兄弟组件 之间通信 最强详解

    目录 1. 父组件 调用 子组件 内参数/方法 1.1 通过 ref 调用/获取 子组件内参数/方法 2. 子组件 调用 父组件 内参数/方法 2.1 通过 emit 调用 父组件方法 2.2 通过  ...

  4. Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    前言 除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案.文章整理一下父子组件.兄弟组件.祖先后代组件间是如何通信的.

  5. vue中父子组件先后渲染_VUE如何实现子父组件、父子组件、兄弟组件传值

    父子组件传值: 父组件定义: 代码示例 子父组件传值: 父组件方法定义: 子组件执行父组件方法定义: methods: { closeOrOpenLeftMenu() { if (this.isLef ...

  6. 六十三、Vue中非父子(兄弟)组件间传值,插槽的使用和作用域插槽(非常重要)

    2020/10/18 . 周日.今天又是奋斗的一天. @Author:Runsen @Date:2020/10/18 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是 ...

  7. vue父子,兄弟组件传值

    一.父子组件通讯 子组件给父组件传值 1.子组件页面 childA <template><div class="childA"><div>这里是 ...

  8. vue3之语法糖script setup的父子组件、兄弟组件传值

    背景:随着vue的使用范围越来越广,使用人数越来越多,其的发展更新速度也是再上一个台阶,vue2故好,但组件化过程中的某些组件化操作稍微有一些弊端,从而vue3随之诞生,vue3兼容typescrip ...

  9. 父子组建传值_父子组件及兄弟组件传值demo

    vue示例 此文档包含Vue,React和小程序示例 首先说一下三者在父子组件传值的异同点,语法上三者在父级向子级传递过程中都使用的是props,父级定义内容,子级进行接收.而在子级向父级进行传递过程 ...

最新文章

  1. STL priority实例
  2. matlab将struct和cell转换成matrices
  3. Linux里的21究竟是什么
  4. 你以为PHP那么好自定义升级?
  5. 运筹学常考知识点总结一
  6. C# 基础知识-09----.NET中SpecialFolder 类
  7. 【c++ | 课上练习】2021年9月23日
  8. 用友CDM系统“货位间商品移库单(一步)”表体增加“货位可用数量”字段,根据表头的选择的货位自动带出数值...
  9. Java Web实战篇-代码之美
  10. 小乌龟SVN合并分支到主干、合并主干到分支,工具操作
  11. html中的flash打不开,浏览器中flash插件被屏蔽怎么办?
  12. Win11任务栏怎么变小?Win11任务栏变小的设置方法
  13. 抖音壁纸小程序怎么做?教你开通和对接流量主拥有自己的小程序
  14. 车架号校验 php代码,VIN车辆识别代码查询
  15. vlan的理解以及华为access、trunk、hybrid三种链路对比
  16. 深入理解OkHttp3:(六)Https
  17. 谁说QTP不能多线程 - 当Python遇上QTP
  18. Macbook 上onenote无法在本地新建笔记本
  19. The reference to entity “XX“ must end with the ‘;‘ delimiter.
  20. ESP8266串口WiFi模块

热门文章

  1. AnimationDrawable 帧动画 爆炸特效
  2. HDU 5405 (树链剖分+线段树)
  3. 建筑CAD基础设计【3】
  4. 复旦计算机系吴昊,数学科学学院候选好导师访谈——吴昊老师
  5. 为了反击爬虫,前端工程师的脑洞可以有多大?
  6. AAC音频格式分析与解码
  7. 9章 RxJava混合实战
  8. 抖音上很火的3D立体动态相册
  9. 小测试--在Windows server 2016中启用RemoteFX-GPU虚拟化功能
  10. Android SearchView