如何使用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的设计模式
Nov 22 Javascript
js处理json以及字符串的比较等常用操作
Sep 08 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
javascript引用类型之时间Date和数组Array
Aug 27 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
JavaScript对象的特性与实践应用深入详解
Dec 30 Javascript
js实现web调用摄像头 js截取视频画面
Apr 21 Javascript
微信小程序上传图片到php服务器的方法
May 23 Javascript
vue axios重复点击取消上一次请求封装的方法
Jun 19 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 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
深入php之规范编程命名小结
2013/05/15 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
javascript定时器完整实例
2015/02/10 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
js实现抽奖功能
2020/11/24 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python-基础-入门 简介
2014/08/09 Python
跟老齐学Python之用while来循环
2014/10/02 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
基于Python log 的正确打开方式
2018/04/28 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python IP地址转整数
2020/11/20 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
2014年创卫实施方案
2014/02/18 职场文书
学校班班通实施方案
2014/06/11 职场文书
营销总监岗位职责
2014/09/16 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
见习报告怎么写
2014/10/31 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫