当前位置:首页 > VUE

vue如何实现父子通信

2026-02-21 14:11:03VUE

父子组件通信方法

Vue 中父子组件通信主要通过 props 和自定义事件实现,以下是具体方法:

props 传递数据

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

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

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

<!-- 子组件 -->
<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>

自定义事件通信

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

vue如何实现父子通信

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

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

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

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

v-model 双向绑定

实现父子组件双向数据绑定:

<!-- 父组件 -->
<template>
  <ChildComponent v-model="parentValue" />
</template>

<script>
export default {
  data() {
    return {
      parentValue: ''
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: ['value']
}
</script>

$refs 访问子组件

vue如何实现父子通信

父组件通过 ref 直接访问子组件实例:

<!-- 父组件 -->
<template>
  <ChildComponent ref="child" />
  <button @click="callChildMethod">Call Child Method</button>
</template>

<script>
export default {
  methods: {
    callChildMethod() {
      this.$refs.child.childMethod()
    }
  }
}
</script>

<!-- 子组件 -->
<script>
export default {
  methods: {
    childMethod() {
      console.log('Child method called')
    }
  }
}
</script>

provide/inject 跨级通信

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

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

<!-- 后代组件 -->
<script>
export default {
  inject: ['theme'],
  created() {
    console.log(this.theme) // 输出: dark
  }
}
</script>

注意事项

  • props 是单向数据流,子组件不应直接修改 props
  • 自定义事件名推荐使用 kebab-case
  • $refs 只在组件渲染完成后才可访问
  • provide/inject 主要用于深层嵌套组件通信

分享给朋友:

相关文章

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…

vue如何实现渲染

vue如何实现渲染

Vue 渲染实现方法 Vue 的渲染主要通过模板编译、虚拟 DOM 和响应式系统实现。以下是具体实现方式: 模板编译 Vue 模板会被编译成渲染函数。模板可以写在 .vue 文件的 <temp…

vue如何实现修改

vue如何实现修改

修改 Vue 组件或数据 在 Vue 中修改数据或组件状态通常涉及响应式数据的更新、组件方法的调用或状态管理工具的使用。以下是几种常见场景的实现方式: 修改响应式数据 Vue 的响应式系统会自动追踪…

vue指令如何实现

vue指令如何实现

Vue 指令的基本实现方式 Vue 指令通过 Vue.directive 方法注册,接受一个指令名和一个定义对象。定义对象包含钩子函数(如 bind、inserted、update 等),用于在不同阶…

vue如何实现cron

vue如何实现cron

Vue 中实现 Cron 表达式功能 在 Vue 项目中实现 Cron 表达式功能通常需要借助第三方库或自定义组件。以下是几种常见方法: 使用 vue-cron 组件 vue-cron 是一个专门为…