如何使用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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
基于jquery的鼠标拖动效果代码
May 30 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
javascript中join方法实例讲解
Feb 21 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
Nov 06 Javascript
简单聊聊TypeScript只读修饰符
Apr 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
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
python 提取文件的小程序
2009/07/29 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
装修活动策划方案
2014/08/27 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis