当前位置:首页 > VUE

vue实现通讯

2026-02-10 10:39:41VUE

Vue 组件通讯方法

在 Vue 中,组件通讯是开发中的核心需求之一,以下是常见的几种实现方式:

父子组件通讯

Props 传递数据 父组件通过 props 向子组件传递数据:

<!-- 父组件 -->
<template>
  <ChildComponent :message="parentMessage" />
</template>

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

<!-- 子组件 -->
<script>
export default {
  props: ['message']
}
</script>

$emit 触发事件 子组件通过 $emit 触发事件,父组件监听事件:

vue实现通讯

<!-- 子组件 -->
<template>
  <button @click="sendMessage">Send</button>
</template>

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

<!-- 父组件 -->
<template>
  <ChildComponent @message="handleMessage" />
</template>

<script>
export default {
  methods: {
    handleMessage(msg) {
      console.log(msg) // 'Hello from child'
    }
  }
}
</script>

兄弟组件通讯

Event Bus 通过一个空的 Vue 实例作为事件总线:

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()
<!-- 组件A -->
<script>
import { EventBus } from './event-bus.js'
export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message', 'Hello from A')
    }
  }
}
</script>

<!-- 组件B -->
<script>
import { EventBus } from './event-bus.js'
export default {
  created() {
    EventBus.$on('message', msg => {
      console.log(msg) // 'Hello from A'
    })
  }
}
</script>

跨层级组件通讯

Provide/Inject 祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据:

vue实现通讯

<!-- 祖先组件 -->
<script>
export default {
  provide() {
    return {
      sharedData: 'Shared value'
    }
  }
}
</script>

<!-- 后代组件 -->
<script>
export default {
  inject: ['sharedData'],
  mounted() {
    console.log(this.sharedData) // 'Shared value'
  }
}
</script>

Vuex 状态管理 适用于大型应用的状态管理方案:

// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})
<!-- 组件A -->
<script>
export default {
  methods: {
    increment() {
      this.$store.commit('increment')
    }
  }
}
</script>

<!-- 组件B -->
<template>
  <div>{{ $store.state.count }}</div>
</template>

其他方式

$attrs 和 $listeners 适用于多层组件传递属性和事件:

<!-- 父组件 -->
<template>
  <ChildComponent :value="value" @input="handleInput" />
</template>

<!-- 中间组件 -->
<template>
  <GrandChildComponent v-bind="$attrs" v-on="$listeners" />
</template>

$parent 和 $children 直接访问父组件或子组件实例(不推荐,破坏组件封装性):

this.$parent.someMethod()
this.$children[0].someData

标签: 通讯vue
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动…