当前位置:首页 > 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>

子组件中:

<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)

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

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

组件中访问和修改:

vue实现父子组件

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

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

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

相关文章

vue组件传值实现分页

vue组件传值实现分页

Vue组件传值实现分页的方法 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方式: 使用props传递数据 父组件通过props向子组件传递当前页码和总页数等分页信息:…

uniapp 分页组件

uniapp 分页组件

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

vue组件实现注册

vue组件实现注册

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

vue 实现table组件

vue 实现table组件

Vue 实现 Table 组件 基础表格结构 使用 Vue 的模板语法构建表格的基本框架,通过 v-for 动态渲染数据。 <template> <table>…

vue实现图片组件

vue实现图片组件

Vue 实现图片组件的方法 基础图片组件实现 创建一个基础的图片组件,支持动态传入图片路径和替代文本。在Vue项目中新建一个ImageComponent.vue文件: <template>…

vue组件实现返回

vue组件实现返回

实现返回功能的 Vue 组件方法 监听浏览器返回事件 通过 window.addEventListener('popstate', callback) 监听浏览器返回按钮事件,在回调函数中执行自定义逻…