在 Vue2 中,组件与组件之间的通信可以通过以下几种方式来实现:

  1. Props 和 Events

这是 Vue2 中最基础和常用的父子组件通信方式。父组件通过属性传递数据给子组件,子组件通过事件触发向父组件传递数据。

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

<template>
<div>
<child-component :message="message"></child-component>
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
data() {
return {
message: 'Hello, World!'
}
}
}
</script>

子组件接收父组件传递的数据

<template>
<div>{{ message }}</div>
</template> <script>
export default {
props: {
message: String
}
}
</script>

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

<template>
<div>
<button @click="$emit('update-message', 'Hello, Vue!')">Update Message</button>
</div>
</template>

父组件监听子组件触发的事件:

<template>
<div>
<child-component @update-message="onMessageUpdated"></child-component>
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
methods: {
onMessageUpdated(message) {
console.log(message);
}
}
}
</script>
  1. $parent 和 $children

在 Vue2 中,每个组件实例都有 $parent$children 属性,可以用来访问组件的父组件和子组件实例。

父组件可以通过 $children 访问子组件:

<template>
<div>
<child-component></child-component>
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
mounted() {
console.log(this.$children[0].message);
}
}
</script>

子组件可以通过 $parent 访问父组件:

<template>
<div>{{ $parent.message }}</div>
</template> <script>
export default {
mounted() {
console.log(this.$parent.message);
}
}
</script>
  1. $refs

在 Vue2 中,可以使用 $refs 来访问组件的引用。可以通过 $refs 访问组件实例的方法和属性,也可以通过 $refs 传递数据。

<template>
<div>
<child-component ref="childComponent"></child-component>
<button @click="updateMessage">Update Message</button>
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
methods: {
updateMessage() {
this.$refs.childComponent.updateMessage('Hello, Vue!');
}
}
}
</script>
<template>
<div>{{ message }}</div>
</template> <script>
export default {
data() {
return {
message:'Hello, World!' }

  },

   methods: {

    updateMessage(message) { this.message = message;}

  }

 }

</script>


4. Event Bus 在 Vue2 中,可以使用事件总线来实现任意组件之间的通信。事件总线本质上是一个空的 Vue 实例,用来作为中央事件总线,任意组件都可以监听事件和触发事件。 创建事件总线:

```javascript
// EventBus.js
import Vue from 'vue';
export const EventBus = new Vue(); <template>
<div>
<button @click="updateMessage">Update Message</button>
</div>
</template> <script>
import { EventBus } from './EventBus.js'; export default {
methods: {
updateMessage() {
EventBus.$emit('update-message', 'Hello, Vue!');
}
}
}
</script>

组件之间传递数据:

<template>
<div>
<button @click="updateMessage">Update Message</button>
</div>
</template> <script>
import { EventBus } from './EventBus.js'; export default {
methods: {
updateMessage() {
EventBus.$emit('update-message', 'Hello, Vue!');
}
}
}
</script>

组件接收数据:

<template>
<div>{{ message }}</div>
</template> <script>
import { EventBus } from './EventBus.js'; export default {
data() {
return {
message: 'Hello, World!'
}
},
mounted() {
EventBus.$on('update-message', message => {
this.message = message;
});
}
}
</script>
  1. Vuex

如果组件之间的通信比较复杂,或者需要在多个组件之间共享数据,可以使用 Vuex。Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式,它集中管理组件之间共享的数据。

创建 store:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex); export const store = new Vuex.Store({
state: {
message: 'Hello, World!'
},
mutations: {
updateMessage(state, message) {
state.message = message;
}
},
actions: {
updateMessage(context, message) {
context.commit('updateMessage', message);
}
}
});

在组件中访问 store 中的数据:

<template>
<div>{{ message }}</div>
</template> <script>
import { mapState } from 'vuex'; export default {
computed: {
...mapState(['message'])
}
}
</script>

在组件中触发 action:

<template>
<div>
<button @click="updateMessage">Update Message</button>
</div>
</template> <script>
import { mapActions } from 'vuex'; export default {
methods: {
...mapActions(['updateMessage'])
}
}
</script>

更多关于 Vuex 的内容可以参考官方文档:https://vuex.vuejs.org/zh/

 

vue全家桶进阶之路17:组件与组件间的通信的更多相关文章

  1. Vue全家桶之组件化开发

    Vue全家桶之组件化开发   一.组件 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素,封装可重用的代码   二. 组件注册 2.1 全局注册 Vue. ...

  2. Vue 全家桶 + Electron 开发的一个跨三端的应用

    代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...

  3. 升级vue全家桶过程记录

    背景 如果你使用了element-ui的el-tabs组件,并且想要单独升级element-ui至2.10.0,你会发现,使用了el-tabs组件的页面只要打开就卡死.原因是element-ui~2. ...

  4. vue证明题一,vue全家桶的构成

    简单说下vue的构成,当然是简单为主,网上这东西满天飞,简单说几句就ok 1.vue是什么 vue读作view,是一种js框架.只关注于视图层,操作内容包括js,html,css 2.vue全家桶是什 ...

  5. Vue全家桶

    简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...

  6. 从零开始系列之vue全家桶(3)安装使用vuex

    什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...

  7. 使用vue全家桶制作博客网站

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...

  8. 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

    使用vue全家桶制作博客网站   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...

  9. Vue全家桶介绍

    一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...

  10. 一个简单的假vue全家桶(vue+vue-router+require)

    首先说明我觉得这是一个比较好理解的vue全家桶(虽然是假的),模块化也是用require来做的,而且如果后期有必要压缩我也会用gulp来做 1.依赖个个本地模块,require只是用来载入page,这 ...

随机推荐

  1. Linux & 标准C语言学习 <DAY9_2>

    一.进程映像     程序:存储在磁盘上的可执行文件(二进制文件.脚本文件)     进程:正在系统中运行的程序     进程映像:进程的内存分布情况         text(代码段):       ...

  2. 手把手 Golang 实现静态图像与视频流人脸识别

    说起人脸识别,大家首先想到的实现方式应该是 Python 去做相关的处理,因为相关的机器学习框架,库都已经封装得比较好了.但是我们今天讨论的实现方式换成 Golang,利用 Golang 去做静态图像 ...

  3. scrcpy软件的使用

    一.scrcpy软件介绍: scrcpy是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需 ...

  4. Salesforce Sharing And Visibility 零基础学习(一)基础知识篇

    本篇参考: https://trailhead.salesforce.com/en/users/strailhead/trailmixes/architect-sharing-and-visibili ...

  5. 剑指 offer 第 24 天

    第 24 天 数学(中等) 剑指 Offer 14- I. 剪绳子 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[ ...

  6. <K, V>型缓存:LRU策略 FIFO策略

    <K, V>型缓存:LRU策略 FIFO策略 这两种替换策略都是通过 LinkedHashMap 实现 LinkedHashMap: LinkedHashMap 继承自 HashMap,所 ...

  7. Centos7.9中使用Docker安装云崽机器人

    Centos7.9中使用Docker安装云崽机器人 前面我写了如何普通版搭建云崽教程,今天我们来使用docker来安装,感谢docker镜像源作者:如青桑(QQ: 1666633887) 普通版教程: ...

  8. 汽车制造工艺 2.5D 可视化组态监控 | 图扑软件

    前言 随着世界经济的不断发展,汽车作为一个如今随处可见的物体,从大体上概括是由四大部分组成:发动机.底盘.车身.电气系统.看似简单的几个名词组件,其内部却是由无数的细小零件构成,一辆汽车更是由上万个微 ...

  9. ML-程序练习-Dragon

    回归问题 前期 假设已有某样例,参数为w=1.477, b=0.089,即为\(y=1.477x+0.089\) 过程分析 数据采样 首先我们需要模拟一些带有真实样本观测误差的数据(因为真实情况是真实 ...

  10. Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so)

    本文首发于 Ficow Shen's Blog,原文地址: Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so). 内容概览 前言 ...