一、父组件向子组件传递数据
在 vue 中,父组件向子组件传递数据使用的是 props 属性。在子组件中通过 props 属性接收父组件传递的数据。
父组件代码:
<template> <div> <child-component :msg="msg"></child-component> </div></template><script> import childcomponent from './childcomponent.vue' export default { components: { childcomponent }, data() { return { msg: 'hello world!' } } }</script>
子组件代码:
<template> <div>{{ msg }}</div></template><script> export default { props: { msg: { type: string, required: true } } }</script>
这里通过在父组件中使用子组件标签的方式传递数据,子组件使用 props 属性接收父组件传递的数据,完成数据传递。
二、子组件向父组件传递数据
子组件向父组件传递数据可以使用自定义事件和 $emit 方法实现。
子组件代码:
<template> <div> <button @click="sendmessage">发送消息</button> </div></template><script> export default { methods: { sendmessage() { this.$emit('send-message', 'hello parent!') } } }</script>
这里通过定义一个方法,使用 $emit 方法传递自定义事件和需要传递的数据。
父组件代码:
<template> <div> <child-component @send-message="receivemessage"></child-component> <div>{{ message }}</div> </div></template><script> import childcomponent from './childcomponent.vue' export default { components: { childcomponent }, data() { return { message: '' } }, methods: { receivemessage(msg) { this.message = msg } } }</script>
这里在父组件中使用子组件标签,监听子组件发送的自定义事件,使用 receivemessage 方法接收子组件传递的消息。
三、兄弟组件之间的通信
在兄弟组件之间的通信中,因为它们没有父子关系,所以不能像父子组件之间通信那样直接使用 props 和 $emit 方法进行通信,需要使用 vue 中另外一种通信方式:事件总线。
事件总线是一个自定义的 vue 实例,用于兄弟组件之间的通信。在一个组件中,我们可以使用 $emit 方法向事件总线发送自定义事件,另一个组件可以通过 $on 方法监听并接收事件。
事件总线代码:
import vue from 'vue'export default new vue();
这里通过一个单独的文件创建一个事件总线。
组件 a 代码:
<template> <div> <button @click="sendmessage">发送消息</button> </div></template><script> import eventbus from '../utils/eventbus' export default { methods: { sendmessage() { eventbus.$emit('send-message', 'hello b!') } } }</script>
这里在组件 a 中发送消息,使用 eventbus.$emit 方法向事件总线发送自定义事件。
组件 b 代码:
<template> <div>{{ message }}</div></template><script> import eventbus from '../utils/eventbus' export default { data() { return { message: '' } }, mounted() { eventbus.$on('send-message', msg => { this.message = msg }) } }</script>
这里在组件 b 中监听事件总线,使用 eventbus.$on 方法接收组件 a 发送的消息。
四、跨级组件的通信
在跨级组件的通信中,我们可以使用 vue 中提供的 provide/inject 方法实现。provide/inject 方法可以将数据传递给任意级别的后代组件。
provide 方法会向后代组件提供一个数据对象,inject 方法将这个数据对象注入到后代组件中。
父级组件代码:
<template> <div> <child-component></child-component> </div></template><script> import childcomponent from './childcomponent.vue' export default { components: { childcomponent }, provide() { return { message: 'hello world!' } } }</script>
这里在父级组件中使用 provide 方法向内部提供一个数据对象 message。
子级组件代码:
<template> <div>{{ value }}</div></template><script> export default { inject: ['message'], computed: { value() { return this.message } } }</script>
这里在子级组件中使用 inject 方法注入父级组件提供的数据对象,然后使用这个数据对象。
总结
以上就是 vue 中组件通信的详细介绍。当我们在开发过程中需要进行组件间的数据交互的时候,以上技术都能够非常好地解决这个问题。我们需要根据具体情况选择最合适的方式来实现组件间的通信,以达到最优的开发效果。
以上就是vue 中的组件通信技术详解的详细内容。
