Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue 中组件通信6种常用的方法

Vue 中组件通信6种常用的方法

作者头像
王小婷
发布于 2023-09-16 00:53:10
发布于 2023-09-16 00:53:10
90904
代码可运行
举报
文章被收录于专栏:编程微刊编程微刊
运行总次数:4
代码可运行

在 Vue 中,组件通信有多种方式可以实现,下面介绍几种常用的方法:

一:Props 和事件

父组件可以通过 Props 将数据传递给子组件,并通过事件监听子组件的事件来实现双向通信。

子组件可以通过 $emit 方法触发事件,父组件可以通过监听子组件的事件来获取数据。

父组件向子组件传递数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <child-component :message="parentMessage" @update="handleUpdate"></child-component>
</template>

<script>
export default {
  data() {
    return {
      parentMessage: 'Hello from parent',
    };
  },
  methods: {
    handleUpdate(message) {
      console.log('Received from child:', message);
    },
  },
};
</script>

子组件接收父组件的数据,并触发事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>{{ message }}</p>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    sendMessage() {
      this.$emit('update', 'Hello from child');
    },
  },
};
</script>
二:自定义事件总线

可以创建一个 Vue 实例作为事件总线,用于组件间的通信。

其他组件可以通过该实例的

on 方法来触发和监听事件。

创建事件总线:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// eventBus.js
import Vue from 'vue';

export const eventBus = new Vue();

在组件中使用事件总线:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

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

export default {
  methods: {
    sendMessage() {
      eventBus.$emit('message', 'Hello from component');
    },
  },
};
</script>

监听事件并接收数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

export default {
  data() {
    return {
      message: '',
    };
  },
  created() {
    eventBus.$on('message', (data) => {
      this.message = data;
    });
  },
};
</script>
三:Vuex(状态管理)

如果需要在多个组件之间共享状态,可以使用 Vuex 进行状态管理。Vuex 提供了一个集中式的状态存储,可以在组件中访问和修改共享的状态。

首先,在根组件中创建和配置 Vuex:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    message: 'Hello from Vuex',
  },
  mutations: {
    updateMessage(state, payload) {
      state.message = payload;
    },
  },
});

然后,在组件中使用 Vuex 的状态和触发 mutations:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>{{ message }}</p>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$store.state.message;
    },
  },
  methods: {
    sendMessage() {
      this.$store.commit('updateMessage', 'Hello from component');
    },
  },
};
</script>

通过在组件中使用 this.

store.commit 触发 mutations 来修改状态。

四:$refs

通过 $refs 可以在父组件中直接访问子组件的属性和方法,从而进行通信。

父组件访问子组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$refs.child.receiveMessage('Hello from parent');
    },
  },
};
</script>

子组件接收父组件的消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '',
    };
  },
  methods: {
    receiveMessage(message) {
      this.message = message;
    },
  },
};
</script>

通过 $refs 可以直接访问子组件实例,并调用其方法或修改其属性。

五:Provide / Inject

通过 provide 和 inject 可以在父组件中提供数据,并在子孙组件中注入并使用这些数据,实现跨层级的组件通信。

父组件提供数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <child-component></child-component>
  </div>
</template>

<script>
export default {
  provide: {
    message: 'Hello from parent',
  },
};
</script>

子组件注入并使用数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

通过 provide 在父组件中提供数据,然后在子组件中使用 inject 来注入并使用这些数据。

这些是几种常用的 Vue 组件通信方式。 选择合适的方式取决于你的需求和项目的复杂性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
全解Vue2的组件通信方式方法
在阅读这篇文章前,推荐一篇“好”文章:Spring MVC:从入门到精通 这篇文章系统全面、实例丰富、深入浅出、步凑详细,是学习Spring MVC的绝佳选择,建议大家阅读。
用户3985749
2024/12/04
2140
Vue中组件之间8种通信方式,值得收藏
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢?首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就好像过年回家,坐着一屋子的陌生人,相互之间怎么称呼,这时就需要先知道自己和他们之间是什么样的关系。vue组件中关系说明:
前端达人
2019/07/30
9160
Vue 8种组件通信方式
vue是数据驱动视图更新的框架,所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢?
前端小tips
2021/11/23
9920
Vue 8种组件通信方式
来吧!一文彻底搞定Vue组件!
组件是什么呢,了解组件对象的分析,Vue组件中的data属性,props传递数据的原理到底是什么。
达达前端
2019/12/16
1K0
来吧!一文彻底搞定Vue组件!
使用 Vue 3 进行组件间通信的完整指南
在阅读这篇文章前,推荐一篇“好”文章:深入浅出JVM(十四)之内存溢出、泄漏与引用原创 这篇文章深入剖析、独到见解、为JAVA开发的内存泄漏问题的解决听过了新的一种思路和综合的方法。
用户3985749
2024/11/28
6090
vue组件通信方式有哪些?
父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信。
bb_xiaxia1998
2022/10/12
2K0
Vue 组件数据通信方案总结
初识 Vue.js ,了解到组件是 Vue 的主要构成部分,但组件内部的作用域是相对独立的部分,组件之间的关系一般如下图:
前端迷
2019/09/25
4560
Vue 组件数据通信方案总结
Vue组件通信原理及应用场景解析
在这篇博客中,我们将深入探讨Vue组件通信的原理,并探索不同的应用场景。组件通信在Vue.js开发中是一个关键的概念,它涉及到组件之间的数据传递和交互。通过理解Vue组件通信的原理和灵活运用,我们可以更好地设计和组织Vue.js应用,提高开发效率和代码质量。
猫头虎
2024/04/08
2780
Vue组件通信原理及应用场景解析
7个 Vue3 中的组件通信方式
本文采用<script setup />的编写方式,比options API更自由。然后我们会讲以下七种组件通信方式:
唐志远
2022/10/27
7650
7个 Vue3 中的组件通信方式
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
如果父组件是混合写法,子组件纯 Vue3 写法的话,是接收不到父组件里 data 的属性,只能接收到父组件里 setup 函数里传的属性。
Swift社区
2024/10/10
3310
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
Vue2.x组件间通信汇总表
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 分享一篇以前做Vue2.x开发时总结的组件通信汇总 一、组件间通信方式表 序号 方式 使用场景 演示代码 说明 1 props 父=>子(属性传参) √ 接收数据: 子组件中props定义接收; 派发数据: 父组件中绑定数据进行派发 2 $emit/$on 子=>父组件通信(事件传参) √ 接收数据: 父组件调用$on/v-on; 派发数据: 子组件调用$emit() 3 event bus 兄弟组件通信
前端小鑫同学
2022/12/26
4540
Vue传值与状态管理总结
使用prop使得父子组件形成一个单向下行绑定:一般情况下,父级prop的更新会流动到子组件中,但是反过来则不行;
前端老道
2022/03/29
2.3K0
总结vue3中常用的组件间通信的方法
这也是面试经常问到的一道题,正好近期刷到这道题, 然后就写写小demo,顺便将父子组件通信,兄弟组件通信, 跨组件通信, 总结复习一下.
心安事随
2024/07/29
1780
总结vue3中常用的组件间通信的方法
Vue.js 组件设计详解
在现代Web开发中,组件化设计已经成为构建可维护和可扩展应用程序的关键策略之一。而 Vue.js 作为一个流行的前端框架,以其简单易用、灵活和高效的特点,成为开发者的首选之一。本文将详细介绍如何设计 Vue 组件,涵盖从基础到高级的概念和实践,包括组件的创建、通信、复用、优化和最佳实践等。
繁依Fanyi
2024/09/10
2770
在业务代码中常用到的Vue数据通信方式
本文是笔者总结过往项目,在vue使用到的一些数据通信方案,希望在实际项目中有些帮助和思考。
Maic
2022/07/28
5.2K0
在业务代码中常用到的Vue数据通信方式
Vue 组件间通信的几种方式
Vue 遵循单向数据流的原则,状态会从父组件传递给子组件,避免子组件意外改变父组件状态导致的混乱逻辑。
前端西瓜哥
2022/12/21
2K0
VUE——vue中组件之间的通信方式有哪些
这种方式,从严格意义上讲不是值的传递,而是一种“取”(不推荐直接通过实例进行值的获取)
思索
2024/08/16
2400
Vue中组件间通信的方式
这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父子组件的通信,所谓单向数据流,就是数据只能通过props由父组件流向子组件,而子组件并不能通过修改props传过来的数据修改父组件的相应状态,所有的prop都使得其父子prop之间形成了一个单向下行绑定,父级prop的更新会向下流动到子组件中,但是反过来则不行,这样会防止从子组件意外改变父级组件的状态,导致难以理解数据的流向而提高了项目维护难度。实际上如果传入一个基本数据类型给子组件,在子组件中修改这个值的话Vue中会出现警告,如果对于子组件传入一个引用类型的对象的话,在子组件中修改是不会出现任何提示的,这两种情况都属于改变了父子组件的单向数据流,是不符合可维护的设计方式的。 正因为这个特性,而我们会有需要更改父组件值的需求,就有了对应的emit,当我们在组件上定义了自定义事件,事件就可以由vm.emit触发,回调函数会接收所有传入事件触发函数的额外参数,
WindRunnerMax
2021/02/02
3.1K0
腾讯前端一面常考vue面试题汇总2
vue构建函数调用_init方法,但我们发现本文件中并没有此方法,但仔细可以看到文件下方定定义了很多初始化方法
bb_xiaxia1998
2023/01/04
6890
组件传值
vue组件之间的传值大致分为三种:父组件给子组件传值,子组件给父组件传值,兄弟组件之间传值 本文主要介绍vue组件之间简单的数据传递,如果组件之间传递的数据比较复杂,建议使用vue的状态管理模式 vuex
ZEHAN
2021/06/15
2K0
相关推荐
全解Vue2的组件通信方式方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验