首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在Vue 3中,父子组件之间的通信有多种方式(应用场景)

在Vue 3中,父子组件之间的通信有多种方式(应用场景)

原创
作者头像
用户12278826
修改2026-04-04 17:32:40
修改2026-04-04 17:32:40
1430
举报
文章被收录于专栏:程序员分享程序员分享

在Vue 3中,父子组件之间的通信有多种方式,每种方式有其特定的应用场景。了解这些通信方式可以帮助你根据实际需求选择最合适的方法。以下是一些主要的父子组件通信方案,包括实战案例。

1. Props(属性)

使用场景‌:父组件向子组件传递数据。

示例代码‌:

父组件‌ (Parent.vue)

代码语言:javascript
复制
vueCopy Code<template>
  <Child :message="parentMessage" />
</template>

<script>
import Child from './Child.vue';

export default {
  components: {
    Child
  },
  data() {
    return {
      parentMessage: 'Hello from parent'
    };
  }
}
</script>

子组件‌ (Child.vue)

代码语言:javascript
复制
vueCopy Code<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: ['message']
}
</script>

2. Events(事件)

使用场景‌:子组件向父组件发送消息。

示例代码‌:

父组件‌ (Parent.vue)

代码语言:javascript
复制
vueCopy Code<template>
  <Child @child-message="handleChildMessage" />
</template>

<script>
import Child from './Child.vue';

export default {
  components: {
    Child
  },
  methods: {
    handleChildMessage(message) {
      console.log('Received from child:', message);
    }
  }
}
</script>

子组件‌ (Child.vue)

代码语言:javascript
复制
vueCopy Code<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('child-message', 'Hello from child');
    }
  }
}
</script>

3. Provide / Inject(提供/注入)

使用场景‌:祖先组件向任意后代组件提供数据。

示例代码‌:

祖先组件‌ (Ancestor.vue)

代码语言:javascript
复制
vueCopy Code<template>
  <Child />
</template>

<script>
import { provide } from 'vue';
import Child from './Child.vue';

export default {
  components: { Child },
  setup() {
    provide('parentMessage', 'Hello from ancestor');
  }
}
</script>

子组件‌ (Child.vue) 或 ‌任何后代组件‌ (Descendant.vue) 使用 inject。

代码语言:javascript
复制
vueCopy Code<template>
  <div>{{ message }}</div> // 使用在后代组件中,同理可以注入在更深层组件中。 例如 Descendant.vue 中也可以使用。 只需确保祖先组件已经提供了该值。 例如:const message = inject('parentMessage'); 然后在模板中使用 {{ message }}。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject('parentMessage'); 然后就可以在模板中使用 {{ message }} 了。 这里的代码片段展示了如何在子组件中使用。 如果是更深层后代,则在相应组件中同样使用 inject 并赋值给一个变量即可。 例如:const message = inject

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Props(属性)
  • 2. Events(事件)
  • 3. Provide / Inject(提供/注入)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档