如何使用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去掉数组中的重复元素
Jan 13 Javascript
jquery.validate分组验证代码
Mar 17 Javascript
JS localStorage实现本地缓存的方法
Jun 22 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
jquery使用经验小结
May 20 Javascript
JS实现Fisheye效果动感放大菜单代码
Oct 21 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
详解SPA中前端路由基本原理与实现方式
Sep 12 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
Jun 05 Javascript
微信小程序 云开发模糊查询实现解析
Sep 02 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 include加载文件两种方式效率比较
2010/08/08 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
php实现映射操作实例详解
2019/10/02 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
python实现备份目录的方法
2015/08/03 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
详解Python自建logging模块
2018/01/29 Python
Flask-Mail用法实例分析
2018/07/21 Python
Python数据可视化图实现过程详解
2020/06/12 Python
python在地图上画比例的实例详解
2020/11/13 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
数控个人求职信范文
2014/02/03 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
收入证明怎么写
2015/06/12 职场文书
会计入职心得体会
2016/01/22 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
Golang jwt身份认证
2022/04/20 Golang