如何使用vuex实现兄弟组件通信

 更新时间:2018年11月02日 11:50:36   作者:bluesboneW  
这篇文章主要给大家介绍了关于如何使用vuex实现兄弟组件通信的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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了,源码链接预览链接 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • vue3封装轮播图组件功能的完整步骤

    vue3封装轮播图组件功能的完整步骤

    我们都知道,轮播图组件模板结构通常是ul包裹li的结构,在vue中,li的数量也通常是由后端接口返回的数据决定,下面这篇文章主要给大家介绍了关于vue3封装轮播图组件功能的相关资料,需要的朋友可以参考下
    2022-11-11
  • vue中this.$router.go(-1)失效(路由改变了,界面未刷新)

    vue中this.$router.go(-1)失效(路由改变了,界面未刷新)

    本文主要介绍了vue中this.$router.go(-1)失效(路由改变了,界面未刷新),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • vue中v-for指令完成列表渲染

    vue中v-for指令完成列表渲染

    这篇文章主要给大家分享的是vue中v-for指令完成列表渲染,下面文化章就围绕中v-for的相关资料在Vue中列表渲染做个简单总结和使用演示,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • 解决父子组件通信的三种Vue插槽

    解决父子组件通信的三种Vue插槽

    这篇文章主要为大家介绍了Vue插槽解决父子组件通信,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • Vue声明式导航与编程式导航及导航守卫和axios拦截器全面详细讲解

    Vue声明式导航与编程式导航及导航守卫和axios拦截器全面详细讲解

    这篇文章主要介绍了Vue声明式导航与编程式导航及导航守卫和axios拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Vue CLI3 如何支持less的方法示例

    Vue CLI3 如何支持less的方法示例

    这篇文章主要介绍了Vue CLI3 如何支持less的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 基于Vue+Node.js实现埋点功能全流程

    基于Vue+Node.js实现埋点功能全流程

    埋点(Track)是指在应用程序、网站或平台中添加代码,以记录特定用户行为和事件的做法,通过添加埋点代码,可以观察和分析用户行为,以调整和改进产品设计和使用体验,本文给大家介绍了基于Vue+Node.js实现埋点功能的全流程,需要的朋友可以参考下
    2025-04-04
  • vue项目中$t()的意思是什么

    vue项目中$t()的意思是什么

    这篇文章主要介绍了vue项目中$t()的意思是什么,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue elementUI Plus实现拖拽流程图的详细代码(不引入插件)

    vue elementUI Plus实现拖拽流程图的详细代码(不引入插件)

    文章介绍了如何使用Vue和elementUI Plus实现一个简单的拖拽流程图功能,不引入任何插件,完全手写,设计思路,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • 如何使用Vue的思想封装一个Storage

    如何使用Vue的思想封装一个Storage

    作为Web Storage API的接口,Storage 提供了访问特定域名下的会话存储或本地存储的功能,例如可以添加、修改或删除存储的数据项,这篇文章主要给大家介绍了关于如何使用Vue的思想封装一个Storage的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论