如何使用vuex实现兄弟组件通信


Posted in Javascript onNovember 02, 2018

前言

vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值,需要先将值传给父组件,再传给子组件,异常麻烦。

下面这篇文章就来给大家介绍下vuex兄弟组件通信的方法,下面话不多说了,来一起看看详细的介绍吧

1. 核心想法

使用vuex进行兄弟组件通信的核心思路就是将vuex作为一个store(vuex被设计的原因之一),将每个子组件的数据都存放进去,每个子组件都从vuex里获取数据,其实就是一句话——把vuex作为一个桥

2. 具体代码

父组件App.vue

<template>
 <div id="app">
 <ChildA/>
 <ChildB/>
 </div>
</template>

<script>
 import ChildA from './components/ChildA' // 导入A组件
 import ChildB from './components/ChildB' // 导入B组件

 export default {
 name: 'App',
 components: {ChildA, ChildB} // 注册A、B组件
 }
</script>

<style>
 #app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
 }

 div {
 margin: 10px;
 }
</style>

子组件ChildA

<template>
 <div id="childA">
 <h1>我是A组件</h1>
 <button @click="transform">点我让B组件接收到数据</button>
 <p>因为你点了B,所以我的信息发生了变化:{{BMessage}}</p>
 </div>
</template>

<script>
 export default {
 data() {
 return {
 AMessage: 'Hello,B组件,我是A组件'
 }
 },
 computed: {
 BMessage() {
 // 这里存储从store里获取的B组件的数据
 return this.$store.state.BMsg
 }
 },
 methods: {
 transform() {
 // 触发receiveAMsg,将A组件的数据存放到store里去
 this.$store.commit('receiveAMsg', {
  AMsg: this.AMessage
 })
 }
 }
 }
</script>

<style>
 div#childA {
 border: 1px solid black;
 }
</style>

子组件ChildB

<template>
 <div id="childB">
 <h1>我是B组件</h1>
 <button @click="transform">点我让A组件接收到数据</button>
 <p>因为你点了A,所以我的信息发生了变化:{{AMessage}}</p>
 </div>
</template>

<script>
 export default {
 data() {
 return {
 BMessage: 'Hello,A组件,我是B组件'
 }
 },
 computed: {
 AMessage() {
 // 这里存储从store里获取的A组件的数据
 return this.$store.state.AMsg
 }
 },
 methods: {
 transform() {
 // 触发receiveBMsg,将B组件的数据存放到store里去
 this.$store.commit('receiveBMsg', {
  BMsg: this.BMessage
 })
 }
 }
 }
</script>

<style>
 div#childB {
 border: 1px solid green;
 }
</style>

vuex模块store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
 // 初始化A和B组件的数据,等待获取
 AMsg: '',
 BMsg: ''
}

const mutations = {
 receiveAMsg(state, payload) {
 // 将A组件的数据存放于state
 state.AMsg = payload.AMsg
 },
 receiveBMsg(state, payload) {
 // 将B组件的数据存放于state
 state.BMsg = payload.BMsg
 }
}

export default new Vuex.Store({
 state,
 mutations
})

我把所有的代码+注释都放在github了,源码链接,预览链接 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用JTrackBar实现的模拟苹果风格的滚动条
Aug 06 Javascript
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
js完美的div拖拽实例代码
Jan 22 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
javascript几个易错点记录
Nov 26 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
Node.js实现文件上传的示例
Jun 28 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
Vue-Router实现组件间跳转的三种方法
Nov 07 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
如何使用pm2快速将项目部署到远程服务器
Mar 12 Javascript
一文快速了解JQuery中的AJAX
May 31 jQuery
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 #Javascript
vue头部导航动态点击处理方法
Nov 02 #Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 #Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 #Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
Nov 02 #Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 #Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 #Javascript
You might like
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
万能的php分页类
2017/07/06 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
DWR Ext 加载数据
2009/03/22 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
js实现打字小游戏
2019/12/17 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python实现挑选出来100以内的质数
2015/03/24 Python
Python类属性的延迟计算
2016/10/22 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
TensorFlow实现模型评估
2018/09/07 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
减负增效提质方案
2014/05/23 职场文书
离婚代理词范文
2015/05/23 职场文书
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫