当前位置:首页 > VUE

vue实现父子组件

2026-03-08 21:16:12VUE

Vue 父子组件通信实现方法

父组件向子组件传递数据(Props)

父组件通过自定义属性向子组件传递数据,子组件通过props接收。父组件中:

<template>
  <ChildComponent :message="parentMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: { ChildComponent },
  data() {
    return {
      parentMessage: '来自父组件的数据'
    }
  }
}
</script>

子组件中:

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}
</script>

子组件向父组件传递数据(自定义事件)

子组件通过$emit触发事件,父组件通过v-on监听。子组件中:

<template>
  <button @click="sendData">传递数据</button>
</template>

<script>
export default {
  methods: {
    sendData() {
      this.$emit('child-event', '子组件数据')
    }
  }
}
</script>

父组件中:

<template>
  <ChildComponent @child-event="handleChildEvent" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: { ChildComponent },
  methods: {
    handleChildEvent(data) {
      console.log(data) // 输出:子组件数据
    }
  }
}
</script>

使用 ref 直接访问子组件

父组件通过ref属性获取子组件实例。父组件中:

<template>
  <ChildComponent ref="childRef" />
  <button @click="callChildMethod">调用子组件方法</button>
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: { ChildComponent },
  methods: {
    callChildMethod() {
      this.$refs.childRef.childMethod()
    }
  }
}
</script>

子组件中:

vue实现父子组件

<script>
export default {
  methods: {
    childMethod() {
      console.log('子组件方法被调用')
    }
  }
}
</script>

使用 provide/inject 跨层级传递

祖先组件通过provide提供数据,后代组件通过inject接收。祖先组件中:

<script>
export default {
  provide() {
    return {
      sharedData: '共享数据'
    }
  }
}
</script>

后代组件中:

<script>
export default {
  inject: ['sharedData'],
  created() {
    console.log(this.sharedData) // 输出:共享数据
  }
}
</script>

使用事件总线(Event Bus)

创建全局事件中心实现任意组件间通信。创建事件总线:

vue实现父子组件

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()

发送事件组件:

import { EventBus } from './eventBus.js'
EventBus.$emit('custom-event', '事件数据')

接收事件组件:

import { EventBus } from './eventBus.js'
EventBus.$on('custom-event', data => {
  console.log(data) // 输出:事件数据
})

使用 Vuex 状态管理

适合复杂应用的状态集中管理。store 中定义状态:

// 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++
    }
  }
})

组件中访问和修改:

// 读取状态
this.$store.state.count

// 提交变更
this.$store.commit('increment')

标签: 父子组件
分享给朋友:

相关文章

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过d…

elementui组件

elementui组件

ElementUI 组件概述 ElementUI 是一套基于 Vue.js 的桌面端组件库,提供丰富的 UI 组件,适用于快速开发中后台系统。以下是其核心组件分类及典型用法。 基础组件 Button…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

vue实现tooltips组件

vue实现tooltips组件

实现基础 Tooltip 组件 创建一个名为 Tooltip.vue 的单文件组件,包含模板、样式和逻辑: <template> <div class="tooltip-con…

vue 实现组件刷新

vue 实现组件刷新

组件局部刷新 在Vue中实现组件刷新可以通过强制重新渲染组件来实现。常用的方法有以下几种: 使用v-if指令 通过切换v-if条件触发组件的销毁和重建 <template> <…

vue实现水印组件

vue实现水印组件

Vue 水印组件的实现方法 使用Canvas绘制水印 在Vue组件中通过Canvas动态生成水印图案,将其作为背景添加到目标元素上。 <template> <div ref="…