技术文档中心
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
  • Vue2 基础

    • Vue 学习指南
    • Vue2 快速入门
    • Vue2 模板语法
    • Vue2 组件基础
    • Vue2 计算属性与侦听器
    • Vue2 生命周期
  • Vue2 进阶

    • Vue2 组件通信
    • Vue2 插槽详解
    • Vue2 混入与自定义指令
    • Vue2 过渡与动画
    • Vuex 状态管理
  • Vue2 高级

    • Vue2 性能优化
    • Vue2 服务端渲染(SSR)
    • Vue2 源码解析
  • Vue3 基础

    • Vue3 快速入门
    • Vue3 Composition API
    • Vue3 响应式系统
    • Vue3 组件基础
    • Vue3 生命周期
  • Vue3 进阶

    • Vue3 组合式函数
    • Vue3 组件通信
    • Vue3 Teleport 与 Suspense
    • Pinia 状态管理
    • Vue Router 4
  • Vue3 高级

    • Vue3 TypeScript
    • Vue3 性能优化
    • Vue3 测试
    • Vue3 SSR
    • Vue3 源码解析
  • 实战项目

    • Vue2 实战项目
    • Vue3 实战项目
    • Vue2 迁移 Vue3

Vue2 组件通信

Props / $emit

父传子(Props)

// 父组件
<child-component :message="parentMessage"></child-component>

// 子组件
props: ['message']

子传父($emit)

// 子组件
this.$emit('custom-event', data)

// 父组件
<child-component @custom-event="handleEvent"></child-component>

$parent / $children

// 访问父组件
this.$parent.parentMethod()

// 访问子组件
this.$children[0].childMethod()

$refs

// 父组件
<child-component ref="child"></child-component>

this.$refs.child.childMethod()

EventBus

// event-bus.js
export const EventBus = new Vue()

// 组件 A
EventBus.$emit('event-name', data)

// 组件 B
EventBus.$on('event-name', (data) => {
  console.log(data)
})

// 销毁时移除监听
beforeDestroy() {
  EventBus.$off('event-name')
}

provide / inject

// 父组件
provide() {
  return {
    theme: 'dark'
  }
}

// 子孙组件
inject: ['theme']

$attrs / $listeners

// 父组件
<child-component :foo="foo" :bar="bar" @custom-event="handleEvent"></child-component>

// 子组件
<grand-child v-bind="$attrs" v-on="$listeners"></grand-child>

Vuex

// store.js
export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

// 组件中使用
this.$store.commit('increment')
console.log(this.$store.state.count)
最近更新: 2026/1/27 15:51
Contributors: hailong
Next
Vue2 插槽详解