当前位置:首页 > VUE

vue父子组件实现

2026-01-19 05:04:13VUE

Vue 父子组件通信实现

Vue 父子组件通信主要通过 props 和 events 实现,父组件向子组件传递数据使用 props,子组件向父组件传递数据使用自定义事件。

父组件向子组件传递数据

父组件通过 props 向子组件传递数据,子组件通过定义 props 接收数据。

父组件模板:

<template>
  <child-component :message="parentMessage"></child-component>
</template>

父组件脚本:

export default {
  data() {
    return {
      parentMessage: 'Hello from parent'
    }
  }
}

子组件接收 props:

export default {
  props: ['message'],
  mounted() {
    console.log(this.message) // 输出: Hello from parent
  }
}

子组件向父组件传递数据

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

子组件触发事件:

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

父组件监听事件:

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

父组件处理方法:

export default {
  methods: {
    handleChildMessage(msg) {
      console.log(msg) // 输出: Hello from child
    }
  }
}

使用 v-model 实现双向绑定

Vue 支持通过 v-model 在父子组件间实现双向数据绑定。

子组件实现:

export default {
  model: {
    prop: 'value',
    event: 'input'
  },
  props: ['value'],
  methods: {
    updateValue(newValue) {
      this.$emit('input', newValue)
    }
  }
}

父组件使用:

<template>
  <child-component v-model="parentValue"></child-component>
</template>

使用 $refs 访问子组件

父组件可以通过 ref 属性访问子组件实例。

父组件模板:

<template>
  <child-component ref="childRef"></child-component>
</template>

父组件脚本:

export default {
  mounted() {
    this.$refs.childRef.childMethod()
  }
}

使用 provide/inject 跨层级传递数据

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

祖先组件:

export default {
  provide() {
    return {
      ancestorData: 'Data from ancestor'
    }
  }
}

后代组件:

export default {
  inject: ['ancestorData'],
  mounted() {
    console.log(this.ancestorData) // 输出: Data from ancestor
  }
}

注意事项

props 应该尽量使用对象形式定义,可以添加类型检查和默认值:

props: {
  message: {
    type: String,
    required: true,
    default: 'Default message'
  }
}

自定义事件名应该使用 kebab-case 命名方式,避免使用大写字母。

vue父子组件实现

避免直接修改 props 的值,应该通过事件通知父组件修改。

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

相关文章

vue实现广告组件

vue实现广告组件

vue实现广告组件的方法 使用动态组件实现 在Vue中可以通过动态组件的方式加载广告组件,根据不同的条件展示不同的广告内容。动态组件使用<component :is="currentCompon…

vue 组件实现 遮罩

vue 组件实现 遮罩

Vue 组件实现遮罩层的方法 基础遮罩层实现 创建一个简单的遮罩层组件,使用绝对定位覆盖整个视口。以下是一个基础实现: <template> <div class="mask"…

vue实现组件切换

vue实现组件切换

Vue 组件切换的实现方法 在 Vue 中实现组件切换有多种方式,以下是几种常见的方法: 动态组件 使用 Vue 内置的 <component> 元素和 is 属性可以动态切换组件:…

vue组件实现注册

vue组件实现注册

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

vue实现拖拽组件

vue实现拖拽组件

Vue 实现拖拽组件的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue实现布局组件

vue实现布局组件

Vue 实现布局组件的方法 基础布局组件结构 使用 Vue 的单文件组件(SFC)创建一个基础布局组件。布局组件通常包含头部、侧边栏、主体内容和页脚。 <template> <…