美文网首页程序员简友广场
vue使用bus进行兄弟组件传值

vue使用bus进行兄弟组件传值

作者: Splendid飞羽 | 来源:发表于2020-08-14 19:59 被阅读0次

方法一:通过bus中转

1.新建bus.js

import Vue from 'vue'
export default  new Vue
2.在需要传值和接受值的vue文件中,各自引入bus.js

import bus from '../util/bus'
3.定义传值的方法,使用bus.$emit('methodName',data), methodName是自定义的方法名

<button @click="trans()">传值</button>
methods: {
    trans(){
      bus.$emit('test',this.helloData)
    }
  },
4.在要接收值的组件里,使用bus.on('methodName',val =>{ }) ,val 就是传过来的值
 mounted(){
    bus.$on('test',val=>{
      console.log(val);
      this.cdata = val
    })
}

如果要传多个值:

 bus.$emit('test',data1,data2,data3……)
//同样接收时候,需要接收多个值

bus.$on(test,(val,val2,val3……)=>{
     console.log(val,val2,val3)
})

如果需要不触发事件,就把值传递给兄弟组件,那么必须通过异步的方法传递,例如axios或者setTimeout

 // 不通过点击事件,把数据传递给兄弟组件,一定要setTimeout,或者axios请求
setTimeout(() => {
    bus.$emit('test',data)
}, 2000);

@完整例子:

App.vue

<template>
    <div id="app">
        <HelloWorld />
        <child></child>
    </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld";
import Child from "./components/Child";
export default {
    name: "App",
    components: {
        HelloWorld,
        Child,
    },
};
</script>

子组件HelloWorld.vue

import Vue from 'vue'
export default  new Vue


<template>
    <div>
        <button @click="trans()">传值</button>
    </div>
</template>
<script>
import bus from "../util/bus";
export default {
    name: "HelloWorld",
    data() {
        return {
            helloData: "hello",
        };
    },
    methods: {
        trans() {
            bus.$emit("test", this.helloData);
        },
    },
};
</script>

子组件Child.vue

<template>
    <div>{{cdata}}</div>
</template>
<script>
import bus from "../util/bus";
export default {
    name: "Child",
    data() {
        return {
            cdata: "子数据",
        };
    },
    mounted() {
        bus.$on("test", (val) => {
            console.log(val);
            this.cdata = val;
        });
    },
};
</script>

方法二:通过vue的原型上定义一个bus,其实和 方法一类似,实现起来有些区别

还有一种比较好的方式,也是我比较推荐的

App.vue或者main.js中定义
Vue.prototype.eventBus = new Vue();

组件A

this.eventBus.$emit('eventName', params)

组件B

this.eventBus.$on('eventName', params)

方法三:直接通过$root传值

组件A

this.$root.$emit('eventName', params)

组件B

this.$root.$on('eventName', params)

注意:事件名必须保持统一

相关文章

  • vue使用bus进行兄弟组件传值

    方法一:通过bus中转 如果要传多个值: 如果需要不触发事件,就把值传递给兄弟组件,那么必须通过异步的方法传递,例...

  • Vue - 兄弟组件传值

    1. 使用中间Vue实例实现兄弟传值。 创建一个用于转发数据的中间Vue实例bus 在子组件1中使用bus.$em...

  • vue组件传值

    1.兄弟组件传值 兄弟组件之间就需要一个中间值,我在这里称为bus。在vue文件main.js中,我们利用 Vue...

  • vue通信方法总结(未)

    1. 父给子通信 2. 子向父传值 3. 兄弟组件传值 eventbus 专门用一个空的 Vue 实例(Bus)来...

  • 组件通信

    vue传值可分为父子之间传值、兄弟组件之间传值、跨代组件之间传值 1.父子之间传值:可以使用$emit/props...

  • 组件传值之兄弟传值

    兄弟传值: 1、如果有共同的父组件,我们可以使用子传父,父传子 2、通过bus总线传值可以应用在任何情况的兄弟传值...

  • vue eventBus传值问题,可以控制台打印,但是无法渲

    本来是打算在兄弟组件之间传值,如下 错误原因如下: 在AllDocument.vue中的那两行代码,首先用bus传...

  • Vue组件之间的传值

    Vue父子组件之间的传值(props)兄弟组件 VUEX

  • 花里胡哨的vue传值

    前言 在vue项目中,不可避免的会在不同组件之间进行传值 ,不同需求下有各式各样的传值方式。就比如说,兄弟组件传值...

  • Vue.js 父子组件传值 . 兄弟组件传值

    概述 vue中组件之间的传值传值情况主要有以下三种 父组件向子组件传值子组件向父组件传值兄弟组件之间相互传值或者是...

网友评论

    本文标题:vue使用bus进行兄弟组件传值

    本文链接:https://www.haomeiwen.com/subject/nidwdktx.html