如何使用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 相关文章推荐
用js实现的检测浏览器和系统的函数
Apr 09 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
Mar 04 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
js Map List 遍历使用示例
Jul 10 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
深入理解javascript的执行顺序
Apr 04 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
如何减少浏览器的reflow和repaint
Feb 26 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
详解创建自定义的Angular Schematics
Jun 06 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备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
jquery json 实例代码
2010/12/02 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Python读取YAML文件过程详解
2019/12/30 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
python打包多类型文件的操作方法
2020/09/21 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
数据员岗位职责
2013/11/19 职场文书
售后主管岗位职责
2013/12/08 职场文书
校园文化建设方案
2014/02/03 职场文书
工商管理自荐书
2014/07/06 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
教研活动主持词
2015/07/03 职场文书
学校运动会感想
2015/08/10 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL