如何使用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 相关文章推荐
一页面多XMLHttpRequest对象
Jan 22 Javascript
JavaScript 继承详解(三)
Jul 13 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
Dec 26 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
Apr 03 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
Nov 18 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
JS实现小球的弹性碰撞效果
Nov 11 Javascript
axios post提交formdata的实例
Mar 16 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 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中文字母数字验证码实现代码
2008/04/25 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
php实现简易计算器
2020/08/28 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
js选择器全面解析
2016/06/27 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python深入学习之内存管理
2014/08/31 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
利用Python获取操作系统信息实例
2016/09/02 Python
python实现黑客字幕雨效果
2018/06/21 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
开会迟到检讨书
2014/02/03 职场文书
企业内部培训方案
2014/02/04 职场文书
施工工地安全标语
2014/06/07 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
MySQL空间数据存储及函数
2021/09/25 MySQL