当前位置: 首页> 健康> 美食 > Vue2常用的组件通信方式有几种

Vue2常用的组件通信方式有几种

时间:2025/7/28 17:20:04来源:https://blog.csdn.net/Jarvan_I/article/details/139080392 浏览次数:0次

Vue2 组件通信方式详解

  1. 父子组件通信(Props)

  2. 子父组件通信($emit)

  3. 兄弟组件通信(Event Bus)

  4. Vuex 状态管理

  5. Provide / Inject

1. 父子组件通信(Props)

定义:

通过在父组件中使用属性(Props)传递数据给子组件。

代码示例:

父组件:

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

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

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

子组件:

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

2. 子父组件通信($emit)

定义:

通过在子组件中使用 $emit 触发自定义事件,父组件监听并响应。

代码示例:

子组件:

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

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('custom-event''Hello from Child');
    },
  },
};
</script>

父组件:

<template>
  <div>
    <child-component @custom-event="handleCustomEvent"></child-component>
  </div>
</template>

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

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

3. 兄弟组件通信(Event Bus)

定义:

通过创建一个事件总线(Event Bus)来实现兄弟组件之间的通信。

代码示例:

Event Bus 文件:

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

兄弟组件1:

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

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

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

兄弟组件2:

<template>
  <p>{{ message }}</p>
</template>

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

export default {
  data() {
    return {
      message'',
    };
  },
  created() {
    EventBus.$on('custom-event', (message) => {
      this.message = message;
    });
  },
};
</script>

4. Vuex 状态管理

定义:

使用 Vuex 管理全局状态,实现任意组件之间的通信。

代码示例:

安装 Vuex:

npm install vuex --save

创建 Store 文件:

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    globalMessage'',
  },
  mutations: {
    setGlobalMessage(state, message) {
      state.globalMessage = message;
    },
  },
});

使用 Vuex 的组件1:

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

<script>
export default {
  methods: {
    sendMessage() {
      this.$store.commit('setGlobalMessage''Hello from Vuex');
    },
  },
};
</script>

使用 Vuex 的组件2:

<template>
  <p>{{ globalMessage }}</p>
</template>

<script>
export

 default {
  computed: {
    globalMessage() {
      return this.$store.state.globalMessage;
    },
  },
};
</script>

5. Provide / Inject

定义:

通过 provideinject 提供和注入属性来实现祖先和后代之间的通信。

代码示例:

祖先组件:

<template>
  <div>
    <descendant-component></descendant-component>
  </div>
</template>

<script>
import { provide } from 'vue';
import { globalMessage } from './symbols.js';

export default {
  setup() {
    provide(globalMessage, 'Hello from Ancestor');
  },
};
</script>

后代组件:

<template>
  <p>{{ ancestorMessage }}</p>
</template>

<script>
import { inject } from 'vue';
import { globalMessage } from './symbols.js';

export default {
  setup() {
    const ancestorMessage = inject(globalMessage);
    return { ancestorMessage };
  },
};
</script>

Symbols 文件:

// symbols.js
import { Symbol } from 'vue';
export const globalMessage = Symbol('globalMessage');

本文由 mdnice 多平台发布

关键字:Vue2常用的组件通信方式有几种

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: