如何使用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 相关文章推荐
javascript 流畅动画实现原理
Sep 08 Javascript
jquery ready函数源代码研究
Dec 06 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
jQuery圆形统计图开发实例
Jan 04 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
May 03 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
jquery将json转为数据字典的实例代码
Oct 11 jQuery
Node.js 中如何收集和解析命令行参数
Jan 08 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
wordpress之wp-settings.php
2007/08/17 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
浅谈React高阶组件
2018/03/28 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python简单生成随机数的方法示例
2018/03/31 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
详解python statistics模块及函数用法
2019/10/27 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python之字典添加元素的几种方法
2020/09/30 Python
网络工程专业毕业生推荐信
2013/10/28 职场文书
医学生自荐信
2013/12/03 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
技术入股合作协议书
2014/10/07 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers