如何使用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中post方法用法实例
Oct 21 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
angular2+node.js express打包部署的实战
Jul 27 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
发布订阅模式在vue中的实际运用实例详解
Jun 09 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
vue 使用v-for进行循环的实例代码详解
Feb 19 Javascript
JavaScript常用进制转换及位运算实例解析
Oct 14 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
综合图片计数器
2006/10/09 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
详解Python中time()方法的使用的教程
2015/05/22 Python
python开发中range()函数用法实例分析
2015/11/12 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
Python如何实现爬取B站视频
2020/05/20 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
优秀党员主要事迹
2014/01/19 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
《称象》教学反思
2014/04/25 职场文书
企业安全标语
2014/06/07 职场文书
2014个人年度工作总结
2014/12/15 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
使用python创建股票的时间序列可视化分析
2022/03/03 Python
详解Python中__new__方法的作用
2022/03/31 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS