在 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. IDEA中,如何将本地项目推送到Github里面

    具体步骤 1.File->VCS->Create Git Repository 然后进入这样一个界面: 接着我们选中当前项目作为本地库: 设置好之后,我们会发现,项目文件全部标红,这是由于 ...

  2. day02-容器功能

    容器功能 1.Spring注入组件的注解 Spring中的传统注解@Component.@Controller.@Service.@Repository,在SpringBoot中仍然有效. 2.@Co ...

  3. python基础篇:Python基础知识,帮助初学者快速入门

    Python是一种高级编程语言,它易于学习和使用,因此成为了许多人的首选编程语言.本文将介绍Python的基础知识,以帮助初学者快速入门. 安装Python 在开始学习Python之前,您需要安装Py ...

  4. Linux中Python自动输入sudo 密码【管道 sudo参数 stdin&stdout】

    一.背景和需求 背景: 由于docker服务进程都是以root帐号的身份运行的,所以用docker跑abpred出来的文件所有者都是root, 而我作为一般用户,操作这个文件不够权限,运行代码时需要s ...

  5. 驱动开发:探索DRIVER_OBJECT驱动对象

    本章将探索驱动程序开发的基础部分,了解驱动对象DRIVER_OBJECT结构体的定义,一般来说驱动程序DriverEntry入口处都会存在这样一个驱动对象,该对象内所包含的就是当前所加载驱动自身的一些 ...

  6. 准确率、召回率及AUC概念分析

    准确率&&召回率 信息检索.分类.识别.翻译等领域两个最基本指标是准确率(precision rate)和召回率(recall rate),准确率也叫查准率,召回率也叫查全率.这些概念 ...

  7. [Java JDK]ResultSet.next()

    1 JDK [jdk1.5doc] Moves the cursor down one row from its current position. A ResultSet cursor is ini ...

  8. 自己动手从零写桌面操作系统GrapeOS系列教程——4.1 在VirtualBox中安装CentOS

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 之前讲解开发环境时并没有介绍具体的安装过程,有网友反应CentOS的安装配置有问题,尤其是共享文件夹.本讲我们就来补充介绍一下在VirtualB ...

  9. Java设计模式 —— 原型模式

    7 原型模式 7.1 原型模式概述 Prototype Pattern:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象. 原型模式的工作原理:将一个原型对象传给创建者,该创建者通 ...

  10. 运行项目报错Cannot read property 'styles' of undefined

    原因是安装依赖版本不对,以下是我的解决办法: 1.先删除项目中package-lock.json 文件 及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很 ...