当前位置:首页 > VUE

vue实现父子组件通信

2026-02-22 14:34:57VUE

父组件向子组件传值(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 触发自定义事件,父组件监听该事件并处理数据。

子组件代码示例:

<template>
  <button @click="notifyParent">Click me</button>
</template>

<script>
export default {
  methods: {
    notifyParent() {
      this.$emit('child-event', 'Data from child');
    }
  }
};
</script>

父组件代码示例:

<template>
  <ChildComponent @child-event="handleChildEvent" />
</template>

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

export default {
  components: { ChildComponent },
  methods: {
    handleChildEvent(data) {
      console.log(data); // 输出: "Data from child"
    }
  }
};
</script>

使用 v-model 实现双向绑定

v-modelprops 和自定义事件的语法糖,适用于表单元素或自定义组件。

子组件代码示例:

<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: ['value']
};
</script>

父组件代码示例:

<template>
  <ChildComponent v-model="inputValue" />
</template>

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

export default {
  components: { ChildComponent },
  data() {
    return {
      inputValue: ''
    };
  }
};
</script>

使用 $refs 访问子组件

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

父组件代码示例:

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

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

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

子组件代码示例:

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

使用 provideinject 跨层级通信

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

祖先组件代码示例:

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

后代组件代码示例:

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

使用事件总线(Event Bus)

创建一个全局事件总线,用于任意组件间的通信。

创建事件总线:

// 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', 'Data from sender');
    }
  }
};
</script>

接收事件组件:

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

export default {
  created() {
    EventBus.$on('message', data => {
      console.log(data); // 输出: "Data from sender"
    });
  }
};
</script>

使用 Vuex 状态管理

对于复杂应用,使用 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实现父子组件通信

<template>
  <div>{{ $store.state.count }}</div>
  <button @click="$store.commit('increment')">Increment</button>
</template>

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

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue实现折叠组件

vue实现折叠组件

实现折叠组件的基本思路 在Vue中实现折叠组件通常需要利用动态绑定和条件渲染。核心是通过控制一个布尔值状态来决定内容是否显示,并添加过渡动画提升用户体验。 基础实现方法 使用v-show或v-if控…

uniapp 分页组件

uniapp 分页组件

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

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent] =…

vue实现搜索组件

vue实现搜索组件

Vue 实现搜索组件的方法 基础搜索组件实现 创建基础搜索组件需要包含输入框和搜索按钮。在Vue中可以使用v-model绑定输入值,通过@click或@keyup.enter触发搜索。 <te…

vue 实现通用组件

vue 实现通用组件

Vue 实现通用组件的方法 封装可复用的组件 将通用功能抽象为独立组件,通过props接收外部数据,通过events与父组件通信。例如封装按钮、输入框、弹窗等基础组件。 使用插槽增强灵活性 通过默认…