当前位置:首页 > VUE

vue实现父子通讯

2026-02-18 16:07:49VUE

Vue 父子组件通信方法

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

父组件通过 props 向子组件传递数据。子组件需要在 props 中声明接收的属性。

父组件模板:

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

父组件脚本:

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

export default {
  components: { ChildComponent },
  data() {
    return {
      parentMessage: 'Hello from parent'
    };
  }
};
</script>

子组件脚本:

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
};
</script>

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

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

子组件模板:

<template>
  <button @click="sendMessage">Send Message</button>
</template>

子组件脚本:

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello from child');
    }
  }
};
</script>

父组件模板:

<template>
  <child-component @message-sent="handleMessage" />
</template>

父组件脚本:

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

export default {
  components: { ChildComponent },
  methods: {
    handleMessage(message) {
      console.log(message); // 'Hello from child'
    }
  }
};
</script>

使用 ref 访问子组件实例

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

父组件模板:

<template>
  <child-component 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>

使用 v-model 实现双向绑定

Vue 的 v-modelprops 和自定义事件的语法糖。

vue实现父子通讯

子组件脚本:

<script>
export default {
  props: ['value'],
  methods: {
    updateValue(newValue) {
      this.$emit('input', newValue);
    }
  }
};
</script>

父组件模板:

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

父组件脚本:

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

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

使用 Provide/Inject 跨层级传递数据

适用于深层嵌套组件通信的场景。

祖先组件脚本:

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

后代组件脚本:

<script>
export default {
  inject: ['sharedData'],
  created() {
    console.log(this.sharedData); // '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', 'Hello from component');
    }
  }
};
</script>

接收事件组件:

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

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

使用 Vuex 状态管理

对于复杂应用,建议使用 Vuex 进行状态管理。

store.js:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    sharedData: ''
  },
  mutations: {
    updateData(state, payload) {
      state.sharedData = payload;
    }
  },
  actions: {
    setData({ commit }, data) {
      commit('updateData', data);
    }
  }
});

组件中提交 mutation:

this.$store.commit('updateData', 'new data');

组件中分发 action:

this.$store.dispatch('setData', 'new data');

组件中访问 state:

computed: {
  sharedData() {
    return this.$store.state.sharedData;
  }
}

以上方法涵盖了 Vue 中父子组件通信的主要方式,可以根据具体场景选择合适的方法。对于简单场景,props 和自定义事件足够;对于复杂场景,建议考虑 Vuex 或 Event Bus。

标签: 父子通讯
分享给朋友:

相关文章

vue父子实现

vue父子实现

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

vue实现父子通讯

vue实现父子通讯

父组件向子组件传值(Props) 在父组件中通过v-bind(或简写为:)向子组件传递数据。子组件通过props接收数据。 父组件代码示例: <template> <Chil…

vue项目实现非父子

vue项目实现非父子

Vue 项目中实现非父子组件通信的方法 在 Vue 项目中,非父子组件通信可以通过多种方式实现,以下是几种常见的方法: 使用 Vuex 状态管理 Vuex 是 Vue 的官方状态管理库,适用于中大型…

react 父子组件如何通信

react 父子组件如何通信

父子组件通信方法 父组件向子组件传递数据(Props) 父组件通过props将数据传递给子组件,子组件通过this.props(类组件)或直接解构(函数组件)接收。这是React中最基础的通信方式。…

react父子组件如何通信

react父子组件如何通信

父子组件通信方法 父组件向子组件传递数据 通过props实现父组件向子组件传递数据。父组件在调用子组件时通过属性传递值,子组件通过props接收。 父组件示例: function Parent()…

react父子组件之间如何通信

react父子组件之间如何通信

父组件向子组件传递数据 父组件通过props向子组件传递数据。在父组件中定义属性,子组件通过this.props接收。 父组件代码示例: <ChildComponent message="H…