当前位置:首页 > 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 穿梭框树组件实现 穿梭框树组件通常结合了树形结构和穿梭框功能,允许用户在左右两栏之间移动树节点数据。以下是基于 Vue 的实现方案: 核心功能设计 数据结构 树形数据通常采用嵌套结构,例如:…

vue实现组件跟随

vue实现组件跟随

Vue 实现组件跟随效果 实现组件跟随效果通常需要监听鼠标或触摸事件,动态更新组件位置。以下是几种常见实现方式: 使用鼠标事件绑定 <template> <div class=…

vue实现水印组件

vue实现水印组件

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

vue实现组件刷新

vue实现组件刷新

强制重新渲染组件 使用 this.$forceUpdate() 方法可以强制 Vue 实例重新渲染,但不会更新子组件。适用于依赖非响应式数据的情况。 methods: { refreshComp…

vue组件实现注册

vue组件实现注册

Vue 组件注册的两种方式 全局注册 通过 Vue.component() 方法注册,注册后可在任意 Vue 实例中使用。通常在项目的入口文件(如 main.js)中操作: import V…

vue实现组件拖动

vue实现组件拖动

Vue 实现组件拖动的几种方法 使用 HTML5 拖放 API HTML5 原生提供了拖放 API,可以通过 draggable 属性实现基础拖拽功能。在 Vue 中可以通过事件绑定实现交互逻辑。…