当前位置:首页 > 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 和自定义事件的语法糖。

子组件脚本:

<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 实现非父子组件通信

创建一个中央事件总线实现任意组件间通信。

创建 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:

vue实现父子通讯

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

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

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

相关文章

vue父子实现

vue父子实现

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

vue父子通讯优雅实现

vue父子通讯优雅实现

Vue 父子组件通信的优雅实现方案 Props 与事件传递 父组件通过 props 向子组件传递数据,子组件通过 $emit 触发事件通知父组件。这是 Vue 官方推荐的基础通信方式。 父组件示例:…

react父子组件如何通信

react父子组件如何通信

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

react如何实现父子方法调用

react如何实现父子方法调用

父子组件方法调用的实现方式 在React中,父子组件之间的方法调用主要通过props传递和回调函数实现。以下是几种常见方法: 父组件调用子组件方法 使用ref获取子组件实例 通过React.crea…

react实现父子通信

react实现父子通信

父组件向子组件传递数据(Props) 父组件通过props将数据传递给子组件。子组件通过props接收父组件传递的数据。 父组件示例: import ChildComponent from './…

js实现父子传值

js实现父子传值

父子组件传值(父传子) 在React中,父组件向子组件传递数据通常通过props实现。父组件在调用子组件时通过属性传递数据,子组件通过props接收。 父组件代码示例: import ChildC…