欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue 兄弟组件的信息传递的方法实例详解

程序员文章站 2022-04-09 16:26:20
前言 兄弟组件的信息传递有三种方式: 1.vuex 传递。 会将信息公有化。 此方法可在所有组件间传递数据。 2.建立vue 实例模块传递数据。 vue 实...

前言

兄弟组件的信息传递有三种方式:

1.vuex 传递。

会将信息公有化。

此方法可在所有组件间传递数据。

2.建立vue 实例模块传递数据。

vue 实例模块会成为共用的事件触发器。

其通过事件传递的信息不回被公有化。

3.建立事件链传递数据。

一个兄弟组件通过事件将信息传给兄弟组件共有的父组件。

父组件再将信息通过属性传递给另一个兄弟组件。

若兄弟组件不是亲兄弟,而是堂兄弟,也就是他们有一个共同的爷爷,那么此方法会使程序变得繁琐。

一,vuex 传递数据

1.安装vuex

npm install vuex --save

2.store.js

import vue from 'vue'
import vuex from 'vuex'
vue.use(vuex)
export const store=new vuex.store({
 state:{
  msgfroma:'a 还没说话',
  msgfromb:'b 还没说话'
 },
 getters:{
 },
 mutations:{
  msgachange(state,msg){
   state.msgfroma=msg;
  },
  msgbchange(state,msg){
   state.msgfromb=msg;
  },
 }
})

3.子组件a.vue

<template>
 <div class="a">
  <h3>a 模块</h3>
  <p>b 说:{{msgfromb}}</p>
  <button @click="asay">a 把自己的信息传给b</button>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    msg:'我是a',
   }
  },
  methods:{
   asay(){
    this.$store.commit('msgachange', this.msg);
   }
  },
  computed: {
   msgfromb() {
    return this.$store.state.msgfromb;
   }
  }
 }
</script>

4.子组件b.vue

<template>
 <div class="b">
  <h3>b 模块</h3>
  <p>a 说:{{msgfroma}}</p>
  <button @click="bsay">b 把自己的信息传给a</button>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    msg:'我是b'
   }
  },
  methods:{
   bsay(){
    this.$store.commit('msgbchange', this.msg);
   }
  },
  computed: {
   msgfroma() {
    return this.$store.state.msgfroma;
   }
  }
 }
</script>

二,vue 实例模块传递数据

1.建立vue 实例模块 bus.js

import vue from 'vue'
export default new vue();

2.子组件 a.vue

<template>
 <div class="a">
  <h3>a 模块</h3>
  <p>b 说:{{msgfromb}}</p>
  <button @click="asay">a 把自己的信息传给b</button>
 </div>
</template>

<script>
 import bus from '../util/bus'
 export default {
  data () {
   return {
    msg:'我是a',
    msgfromb:'b 还没说话',
   }
  },
  created(){
   let _this=this;
   bus.$on('msgbchange',function(dt){
    _this.msgfromb=dt;
   })
  },
  methods:{
   asay(){
    bus.$emit('msgachange',this.msg);
   }
  }
 }
</script>

3.子组件 b.vue

<template>
 <div class="b">
  <h3>b 模块</h3>
  <p>a 说:{{msgfroma}}</p>
  <button @click="bsay">b 把自己的信息传给a</button>
 </div>
</template>

<script>
 import bus from '../util/bus'
 export default {
  data () {
   return {
    msg:'我是b',
    msgfroma:'a 还没说话'
   }
  },
  created(){
   let _this=this;
   bus.$on('msgachange',function(dt){
    _this.msgfroma=dt;
   })
  },
  methods:{
   bsay(){
    bus.$emit('msgbchange',this.msg);
   }
  }
 }
</script>

三,事件链传递数据

1.父组件 c.vue

<template>
 <div class="c">
  <h3>事件链传递数据</h3>
  <appa :msg-from-b="msgfromb" v-on:msg-a-change="asay"></appa>
  <appb :msg-from-a="msgfroma" v-on:msg-b-change="bsay"></appb>
 </div>
</template>

<script>
 import a from '../a3/a'
 import b from '../b3/b'
 export default {
  data () {
   return {
    msgfroma:'a 还没说话',
    msgfromb:'b 还没说话'
   }
  },
  methods:{
   asay(msg){
    this.msgfroma=msg;
   },
   bsay(msg){
    this.msgfromb=msg;
   },
  },
  components:{
   appa:a,
   appb:b,
  }
 }
</script>

2.子组件 a.vue

<template>
 <div class="a">
  <h3>a 模块</h3>
  <p>b 说:{{msgfromb}}</p>
  <button @click="asay">a 把自己的信息传给b</button>
 </div>
</template>

<script>
 export default {
  data () {
   return {
    msg:'我是a',
   }
  },
  methods:{
   asay(){
    this.$emit('msg-a-change', this.msg)
   }
  },
  props: ['msgfromb'],
 }
</script>

3.子组件 b.vue

<template>
 <div class="b">
  <h3>b 模块</h3>
  <p>a 说:{{msgfroma}}</p>
  <button @click="bsay">b 把自己的信息传给a</button>
 </div>
</template>

<script>
 import bus from '../util/bus'
 export default {
  data () {
   return {
    msg:'我是b',
   }
  },
  methods:{
   bsay(){
    this.$emit('msg-b-change', this.msg)
   }
  },
  props: ['msgfroma'],
 }
</script>

总结

以上所述是小编给大家介绍的vue 兄弟组件的信息传递的方法,希望对大家有所帮助