当前位置:首页 > VUE

vue父子实现

2026-03-09 23:16:02VUE

Vue 父子组件通信实现方法

Vue 中父子组件通信可以通过多种方式实现,主要包括 props、自定义事件、ref 和 provide/inject 等。以下是几种常见的实现方式:

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

父组件通过 props 向子组件传递数据,子组件通过 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']
};
</script>

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

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

子组件代码:

<template>
  <button @click="sendMessage">Send Message</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>

使用 ref 直接访问子组件

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

vue父子实现

父组件代码:

<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 注入数据。

祖先组件代码:

vue父子实现

<script>
export default {
  provide() {
    return {
      providedData: 'Data from ancestor'
    };
  }
};
</script>

后代组件代码:

<script>
export default {
  inject: ['providedData'],
  mounted() {
    console.log(this.providedData); // 'Data from ancestor'
  }
};
</script>

使用事件总线(Event Bus)

对于非父子组件通信,可以创建一个 Vue 实例作为事件总线。

事件总线代码:

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

发送组件代码:

<script>
import { EventBus } from './event-bus.js';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message-event', 'Hello from sender');
    }
  }
};
</script>

接收组件代码:

<script>
import { EventBus } from './event-bus.js';

export default {
  created() {
    EventBus.$on('message-event', message => {
      console.log(message); // 'Hello from sender'
    });
  }
};
</script>

以上方法可以根据具体场景选择使用,props 和自定义事件适用于直接的父子组件通信,provide/inject 适用于跨层级通信,事件总线适用于任意组件间通信。

标签: 父子vue
分享给朋友:

相关文章

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…