如何使用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 相关文章推荐
基于JQuery的列表拖动排序实现代码
Oct 01 Javascript
js创建表单元素并使用submit进行提交
Aug 14 Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 Javascript
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
浅谈Vue的响应式原理
May 30 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 Javascript
vue中实现高德定位功能
Dec 03 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 Javascript
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中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python类的动态修改的实例方法
2017/03/24 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
Python之pymysql的使用小结
2019/07/01 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python实现KNN分类算法
2019/10/16 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python 实现两个线程交替执行
2020/05/02 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
网站域名和主机:Domain.com
2019/04/01 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
顶岗实习计划书
2014/01/10 职场文书
应届毕业生自荐信
2015/03/04 职场文书
中学社团活动总结
2015/05/07 职场文书
生日赠语
2015/06/23 职场文书
python实现进度条的多种实现
2021/04/29 Python
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP