在Vue 3中,父子组件之间的通信有多种方式,每种方式有其特定的应用场景。了解这些通信方式可以帮助你根据实际需求选择最合适的方法。以下是一些主要的父子组件通信方案,包括实战案例。
使用场景:父组件向子组件传递数据。
示例代码:
父组件 (Parent.vue)
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)
vueCopy Code<template>
<div>{{ message }}</div>
</template>
<script>
export default {
props: ['message']
}
</script>使用场景:子组件向父组件发送消息。
示例代码:
父组件 (Parent.vue)
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)
vueCopy Code<template>
<button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
methods: {
sendMessage() {
this.$emit('child-message', 'Hello from child');
}
}
}
</script>使用场景:祖先组件向任意后代组件提供数据。
示例代码:
祖先组件 (Ancestor.vue)
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。
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 删除。