如何使用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 相关文章推荐
二级域名或跨域共享Cookies的实现方法
Aug 07 Javascript
表单元素事件 (Form Element Events)
Jul 17 Javascript
起点页面传值js,有空研究学习下
Jan 25 Javascript
Javascript中获取对象的原型对象的方法小结
Feb 25 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
May 31 Javascript
js倒计时简单实现代码
Aug 11 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 Javascript
element tree树形组件回显数据问题解决
Aug 14 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下intval()和(int)转换使用与区别
2008/07/18 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python注释详解
2016/06/01 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
Python list与NumPy array 区分详解
2019/11/06 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
基于Pytorch SSD模型分析
2020/02/18 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
最新茶叶店创业计划书
2014/01/14 职场文书
党员实事承诺书
2014/03/26 职场文书
应聘英语教师求职信
2014/04/24 职场文书
仓库管理计划书
2014/05/04 职场文书
企业理念标语
2014/06/09 职场文书
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技