vue3中兄弟组件间传递

本文详细介绍了在Vue应用中,兄弟组件间如何通过事件(emit)进行数据传递,以及父组件如何将数据传递给子组件(props)。包括Vue2和Vue3的实现方式以及相关代码示例。

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

问题:同一个父组件中的兄弟组件间通信

总体思路:

(1)兄弟组件1将数据传递给父组件

(2)父组件将数据传递给兄弟组件2

样例:

父组件parent.vue

<template>
    <child1></child1>
    <child2 @sendData="getDataFromChild2"></child2>
</template>

1、兄弟组件child2将数据传递给父组件parent

child2.vue中代码:

vue2写法

methods:{
        child1SendToFather(){
            this.$emit('sendData','111111')
        }
    }

vue3写法

setup(props,ctx){
    fun(){
        ctx.emit('sendData','111111')
    }

}

2、父组件parent接收传递的数据

parent.vue中代码

<template>
    <child1></child1>
    <child2 @sendData="getDataFromChild2"></child2>
</template>
getDataFromChild2(data){
    //data为从组件child2中传递过来的数据
    console.log(data)
}

3、父组件parent.vue将数据传递给子组件child1

parent.vue中代码:

<template>
    <child1 :sendDataToChild1="tocChild1Data"></child1>
    <child2 @sendData="getDataFromChild2"></child2>
</template>
getDataFromChild2(data){
    //data为从组件child2中传递过来的数据
    console.log(data)
    this.tocChild1Data = data;
}

4、子组件child1接收数据

props: {
       //使用props接收从父组件传递的数据tocChild1Data
      tocChild1Data:{
         type:String
      }

 }

参考:vue中的子传父和父传子_vue父传子方法-优快云博客

### Vue 3兄弟组件的数据传递Vue 3 中,实现兄弟组件的通信可以通过多种方式完成。一种常见的方式是利用事件总线(EventBus),这允许不同层次的组件之发送消息而不必依赖于父子关系。 ```javascript // 创建一个全局事件总线实例 const eventBus = new Vue(); // 导出以便其他模块导入使用 export default eventBus; ``` #### 发送方组件 (BrotherA.vue) 当某个操作触发时,比如按钮点击,可以发射自定义事件并携带参数: ```vue <template> <button @click="sendData">Send Message</button> </template> <script setup> import { ref } from &#39;vue&#39;; import eventBus from &#39;./eventBus&#39;; function sendData() { const dataToTransfer = { message: &#39;Hello from Brother A!&#39; }; eventBus.emit(&#39;data-transfer&#39;, dataToTransfer); } </script> ``` #### 接收方组件 (BrotherB.vue) 接收端监听特定名称的事件,并处理收到的信息: ```vue <template> <div>{{ receivedMessage }}</div> </div> </template> <script setup> import { onMounted, ref } from &#39;vue&#39;; import eventBus from &#39;./eventBus&#39;; let receivedMessage = ref(&#39;&#39;); onMounted(() => { eventBus.on(&#39;data-transfer&#39;, function(data) { console.log(data.message); // 输出日志用于调试目的 receivedMessage.value = data.message; // 更新响应式的变量 }); }); </script> ``` 这种方法适用于简单的场景,在大型项目中可能需要考虑更复杂的解决方案如 Vuex 或者 Composition API 提供的状态管理工具[^2]。 另一种推荐的方法是在父级创建共享状态并通过 `provide` 和 `inject` 将其暴露给多个子组件访问[^4]。这种方式避免了过度嵌套带来的复杂性和维护成本的同时保持良好的性能表现。 对于跨层级或多层嵌套的情况,则可采用 provide/inject 组合或是专门的状态管理模式来简化开发流程和提高代码质量[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值