如何使用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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 Javascript
angular中的post请求处理示例详解
Jun 30 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
php实现mysql封装类示例
2014/05/07 PHP
PHP中文乱码解决方案
2015/03/05 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
npm qs模块使用详解
2020/02/07 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python实现串口通信的示例代码
2020/02/10 Python
深入浅析Python代码规范性检测
2020/07/31 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
新电JAVA笔试题目
2014/08/31 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
面料业务员岗位职责
2013/12/26 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
投资合作协议书
2014/04/17 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
文明旅游倡议书
2015/04/28 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python