在 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. 【新版】使用 go-cqhttp 扫码登录,一键接入 ChatGPT 机器人到 QQ 群

    目录 项目效果 安装 go-cqhttp 虚拟文件 启动 ChatGPT 项目效果 由于 ChatGPT 目前只能在漂亮国使用,所以想要在国内使用 ChatGPT 必然险阻重重 不仅时时刻刻要跟企鹅公 ...

  2. Activiti7开发(五)-我的审批历史

    查看本人审批过的历史 public AjaxResult historyFromData(@RequestParam(value = "businessKey",required ...

  3. 消息队列RabbitMQ业务场景应用及解决方案

    目录 0. 博客参考 1. 背景 2. 技术选型 3. 消息队列的几个常见问题 4. 代码功能开发及测试 4.1 生产者 4.2 消费者 5. 源代码 6.补充:消息的顺序性 0. 博客参考 http ...

  4. Dcat admin 多文件上传,七牛云云端上传

    进入官网  Dcat Admin - Php后台开发框架 这里要选择1.x 下面来安装框架 安装完laravel之后,需要修改.env文件,设置数据库链接设置正确 安装 dcat-admin comp ...

  5. MyBatisPlus 逻辑删除演示

    一.数据库 数据库中添加逻辑删除字段:

  6. HDFS写操作(简单源码解读)

    HDFS最重要的就是写流程了,学校老师教的时候也是重点介绍这个过程(虽然我并没有在任何面试中被问到过).下面从画图和文字两个过程介绍写流程,这次读了源代码之后对整个过程更加清晰了. 一.图解 二.文字 ...

  7. Edge解决默认Bing搜索跳转到国内版的问题

    近期BingGPT申请通过以后,每次用PC端Edge去跳转的时候不管是否念Proxy咒都会进入国内版本Bing,排查得到默认Bing参数如下 因此,在edge://settings/searchEng ...

  8. proprety详解

    property() 函数和@property修饰符. 第一种方法,使用property() 函数: class Person: def __init__(self): self.__name= No ...

  9. 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】

    比赛传送门:https://ac.nowcoder.com/acm/contest/53366 难度适中. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式 ...

  10. Go语言网络编程:SSH连接

    旨在提升Go语言网络编程能力 SSH是什么? SSH 为 Secure Shell 的缩写,为建立在应用层基础上的安全协议.SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SS ...