华为快应用-兄弟组件之间的通信

本文介绍了一种Vue中兄弟组件间的通信方法,通过在父组件中建立子组件间的引用关系实现双向传值。提供了两种传值方式:调用方法和触发事件,并展示了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面几篇博客中博主详细说明了父子组件之间的正反向传值,这篇博客,博主就带大家一起来学习下兄弟组件之间的相互传值。
既然是兄弟组件,那么他们一定有共同的父组件,这是他们传值的关键:
首先在他们共有的父组件中写如下代码:

        onReady () {
            this.establishRef()
        },
                /**
                * 建立相互VM的引用
                */
        establishRef () {
            //cards是兄弟组件1的id,shequs是兄弟组件2的id
            const siblingVm1 = this.$vm('cards')
            const siblingVm2 = this.$vm('shequs')
            //父组件是siblingVm1(cards)的parentVm
            siblingVm1.parentVm = this
            //建立相互引用,siblingVm1(cards)是siblingVm2(shequs)的parentVm
            siblingVm1.nextVm = siblingVm2
            //父组件是siblingVm2(shequs)的parentVm
            siblingVm2.parentVm = this
            //建立相互引用,siblingVm2(cards)是siblingVm1(shequs)的nextVm
            siblingVm2.previousVm = siblingVm1
        }
/*上面的引用关系很重要,在传值时绝对不能写错了,直接决定传值是否能成功*/

在兄弟组件1中:

//兄弟组件1中,按钮来触发传值(兄弟组件1向兄弟组件2传值)
        changeAction:function() {
            //因为兄弟组件1是兄弟组件2的parentVm,所以,兄弟组件2是兄弟组件1的nextVm,如果this.nextVm表示兄弟组件1有nextVm,开始传值
            if (this.nextVm) {
                //传值方法有两种,分别如下
                // Way1. 调用方法
                // this.previousVm.processMessage('兄弟之间通信的消息内容')
                // Way2. 触发事件
                this.nextVm.$emit('customEventInVm2', '兄弟之间通信的消息内容')
            }
        }

在兄弟组件2中接收来自兄弟组件1的传值:

//兄弟组件2中(接收来自兄弟组件1的传值)
        data () {
            return {
                changeStr1: '默认'
            }
        },
        //传递方法1的接收方法
        processMessage (msg) {
            console.log(msg);
            const now = (new Date).toISOString()
            this.changeStr1 = `${now}: ${msg}`
        },
        /**
        * 通过events对象:绑定事件
        */
        //传递方法2的接收方法
        events: {
            customEventInVm2 (evt) {
                const now = (new Date).toISOString()
                this.changeStr1 = `${now}: ${evt.detail}`
            }
        }

如果你希望兄弟组件2向兄弟组件1中传值,一样的方法,只是你需要把nextVm和parentVm进行调换,这一点和其他语言中的传值略有不同,要区分一个先后的。

到此,你学会了么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值