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

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 多平台发布

相关推荐

  1. Vue2常用组件通信方式

    2024-05-25 18:09:00       15 阅读
  2. VUE组件常用通信方式哪些?

    2024-05-25 18:09:00       18 阅读
  3. vue组件之间通信方式多少

    2024-05-25 18:09:00       33 阅读
  4. Vue2组件通信方式

    2024-05-25 18:09:00       16 阅读
  5. Vue 组件通信方式

    2024-05-25 18:09:00       11 阅读
  6. vue 项目中常用import 书写 方式

    2024-05-25 18:09:00       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-25 18:09:00       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-25 18:09:00       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-25 18:09:00       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-25 18:09:00       18 阅读

热门阅读

  1. STL源码看书笔记(1)——代码解析

    2024-05-25 18:09:00       9 阅读
  2. Qt TreeWidget详细说明

    2024-05-25 18:09:00       12 阅读
  3. Golang:使用net/http实现一个简易的http服务器

    2024-05-25 18:09:00       11 阅读
  4. Go 实现程序优雅退出

    2024-05-25 18:09:00       8 阅读
  5. Python数据类型转换

    2024-05-25 18:09:00       9 阅读
  6. UDP服务器与客户端之间的区别?

    2024-05-25 18:09:00       10 阅读
  7. Python Minio 工具类封装

    2024-05-25 18:09:00       9 阅读
  8. 探索自然语言处理预训练模型:GPT-3详解

    2024-05-25 18:09:00       9 阅读
  9. 信息泄露--注意点点

    2024-05-25 18:09:00       8 阅读
  10. C#字典的常用方法

    2024-05-25 18:09:00       10 阅读