当前位置:首页 > VUE

vue实现父子组件

2026-02-17 08:55:20VUE

Vue 父子组件通信实现方法

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

在父组件中通过 v-bind 或简写 : 将数据传递给子组件。子组件通过 props 接收数据。

父组件代码示例:

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

<script>
import ChildComponent from './ChildComponent.vue'

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

子组件代码示例:

<template>
  <div>{{ message }}</div>
</template>

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

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

子组件通过 $emit 触发自定义事件,父组件通过 v-on 或简写 @ 监听事件。

子组件代码示例:

<template>
  <button @click="sendMessage">Send to Parent</button>
</template>

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

父组件代码示例:

<template>
  <ChildComponent @message-from-child="handleChildMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleChildMessage(message) {
      console.log(message) // 输出: Hello from child
    }
  }
}
</script>

父组件访问子组件(Refs)

父组件可以通过 ref 属性直接访问子组件的属性和方法。

父组件代码示例:

<template>
  <ChildComponent ref="childRef" />
  <button @click="callChildMethod">Call Child Method</button>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

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

子组件代码示例:

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

使用 Provide/Inject 跨层级传递数据

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

祖先组件代码示例:

<script>
export default {
  provide() {
    return {
      sharedData: 'Shared data from ancestor'
    }
  }
}
</script>

后代组件代码示例:

<script>
export default {
  inject: ['sharedData'],
  created() {
    console.log(this.sharedData) // 输出: Shared data from ancestor
  }
}
</script>

使用事件总线(Event Bus)

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

创建事件总线:

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()

发送事件组件:

import { EventBus } from './event-bus.js'

EventBus.$emit('custom-event', 'Some data')

接收事件组件:

vue实现父子组件

import { EventBus } from './event-bus.js'

EventBus.$on('custom-event', data => {
  console.log(data) // 输出: Some data
})

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

相关文章

vue实现倒计时组件

vue实现倒计时组件

Vue 倒计时组件实现 核心思路 通过 setInterval 或 setTimeout 实现时间递减,结合 Vue 的响应式数据更新 UI。需注意组件销毁时清除定时器。 基础实现方案 模板部分…

vue组件实现

vue组件实现

Vue 组件实现 Vue 组件是 Vue.js 的核心特性之一,允许开发者将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种常见方式: 单文件组件(SFC) 单文件组件是 Vue 中…

vue 实现toast组件

vue 实现toast组件

实现 Vue Toast 组件的方法 创建基础 Toast 组件 在 Vue 项目中创建一个基础 Toast 组件,通常包含消息内容和显示控制逻辑。 <template> &…

vue实现日历组件

vue实现日历组件

Vue 日历组件实现步骤 基础结构搭建 使用Vue 3的Composition API或Options API创建组件框架。核心结构包括年份/月份切换按钮、星期标题栏和日期网格。 <t…

vue实现search组件

vue实现search组件

Vue 实现搜索组件 基础实现 创建一个基础的搜索组件需要包含输入框和搜索逻辑。以下是一个简单的实现示例: <template> <div class="search-cont…

vue 实现树组件

vue 实现树组件

Vue 树形组件实现 基础树形结构实现 使用递归组件实现树形结构,核心是通过组件自身调用自身渲染嵌套数据。 <template> <ul> <li v-fo…