vue实现反向推送
vue实现反向推送的方法
反向推送通常指子组件向父组件传递数据或触发事件。Vue中实现反向推送的核心机制是通过自定义事件和$emit方法。
自定义事件触发
子组件通过this.$emit('event-name', data)触发事件,父组件通过v-on或@监听该事件。例如子组件按钮点击时触发事件:
// 子组件
<button @click="sendData">推送数据</button>
methods: {
sendData() {
this.$emit('update-data', { message: '数据内容' })
}
}
父组件监听事件并处理:
// 父组件
<child-component @update-data="handleData" />
methods: {
handleData(payload) {
console.log(payload.message) // 输出"数据内容"
}
}
v-model双向绑定简化
对于表单元素等场景,可利用v-model语法糖实现双向绑定。子组件需声明model选项并触发input事件:
// 子组件
<template>
<input :value="value" @input="$emit('input', $event.target.value)">
</template>
<script>
export default {
props: ['value']
}
</script>
父组件直接使用v-model绑定:
<child-component v-model="parentData" />
sync修饰符(Vue 2.x)
需要双向绑定多个prop时,可使用.sync修饰符。子组件通过update:propName模式触发更新:
// 子组件
this.$emit('update:title', newTitle)
// 父组件
<child-component :title.sync="pageTitle" />
Vue 3的v-model改进
Vue 3支持多个v-model绑定,且默认使用modelValue作为prop名,update:modelValue作为事件名:
// 子组件
<button @click="$emit('update:modelValue', newValue)">
// 父组件
<child-component v-model="data1" v-model:second="data2" />
跨层级组件通信 对于非父子组件,可使用Vuex状态管理或Event Bus模式。创建全局事件总线:
// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()
// 组件A发送事件
EventBus.$emit('event', data)
// 组件B接收事件
EventBus.$on('event', callback)






