返回
VUE兄弟组件之间传值$emit和$on的实战操作
前端
2023-10-23 13:43:42
在VUE中,兄弟组件之间的传值可以通过$emit
和$on
来实现。$emit
用于触发事件,$on
用于监听事件。下面是实现兄弟组件之间传值的详细步骤:
- 在需要发送事件的组件中,使用
$emit
触发事件。例如:
this.$emit('my-event', data);
其中,'my-event'
是事件名称,data
是需要传递的数据。
- 在需要接收事件的组件中,使用
$on
监听事件。例如:
this.$on('my-event', (data) => {
// 处理接收到的数据
});
其中,'my-event'
是事件名称,(data) => { ... }
是事件处理函数。
- 这样,当需要发送事件的组件触发
$emit
时,需要接收事件的组件就会接收到事件并执行相应的事件处理函数。
除了上述步骤外,在使用$emit
和$on
时还需要注意以下几点:
- 事件名称必须是一个字符串。
- 事件数据可以是任何类型。
- 事件处理函数可以是任何函数。
- 事件处理函数可以有多个参数。
- 可以使用
$off
来取消事件监听。
下面是一个使用$emit
和$on
实现兄弟组件之间传值的示例代码:
// 父组件
<template>
<div>
<button @click="handleClick">Send Data</button>
<child-component @my-event="handleEvent"></child-component>
</div>
</template>
<script>
export default {
methods: {
handleClick() {
this.$emit('my-event', 'Hello from parent component!');
},
handleEvent(data) {
console.log('Received data from child component:', data);
}
}
};
</script>
// 子组件
<template>
<div>
<p>Data from parent component: {{ data }}</p>
</div>
</template>
<script>
export default {
data() {
return {
data: ''
};
},
methods: {
handleEvent(data) {
this.data = data;
}
},
mounted() {
this.$on('my-event', this.handleEvent);
},
beforeDestroy() {
this.$off('my-event', this.handleEvent);
}
};
</script>
在这个示例中,父组件有一个按钮,点击按钮后会触发handleClick
方法,该方法会通过$emit
触发'my-event'
事件,并将"Hello from parent component!"
作为事件数据传递给子组件。子组件通过$on
监听'my-event'
事件,并在接收到事件后执行handleEvent
方法,并将接收到的事件数据存储到data
变量中。
通过这种方式,父组件和子组件就可以实现通信,父组件可以向子组件发送数据,子组件可以接收并处理这些数据。