vue.js 兄弟组件传值

vue

另:  在vue里,组件之间的作用域是独立的,父组件跟子组件之间的通讯可以通过prop属性来传参,但是在兄弟组件之间通讯就比较麻烦了,虽然可以使用事件监听的方式,但还是不如vuex专业。比如A组件要告诉一件事给B组件,那么A就要先告诉他们的爸组件,然后爸组件再告诉B。当组件比较多,要互相通讯的事情很多的话,爸组件要管他们那么多事,很累的。vuex正是为了解决这个问题,让多个子组件之间可以方便的通讯。

事件监听的方式的通信示例:

1、兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据

2、创建一个Vue的实例,让各个兄弟共用同一个事件机制。

3、传递数据方,通过一个事件触发bus.$emit(方法名,传递的数据)。

4、接收数据方,通过mounted(){}触发bus.$on(方法名,function(接收数据的参数){用该组件的数据接收传递过来的数据}),此时函数中的this已经发生了改变,可以使用箭头函数。

实例如下:

我们可以创建一个单独的js文件eventVue.js,内容如下:

import Vue from 'vue'

export default new Vue

假如父组件如下:

<template>

<components-a></components-a>

<components-b></components-b>

</template>

子组件a如下:

<template>

<div class="components-a">

<button @click="abtn">A按钮</button>

</div>

</template>

<script>

import eventVue from '../../js/event.js'

export default {

name: 'app',

data () {

return {

‘msg':"我是组件A"

}

},

methods:{

abtn:function(){

eventVue .$emit("myFun",this.msg) //$emit这个方法会触发一个事件

}

}

}

</script>

子组件b如下:

<template>

<div class="components-a">

<div>{{btext}}</div>

</div>

</template>

<script>

import eventVue from '../../js/event.js'

export default {

name: 'app',

data () {

return {

'btext':"我是B组件内容"

}

},

created:function(){

this.bbtn();

},

methods:{

bbtn:function(){

eventVue .$on("myFun",(message)=>{ //这里最好用箭头函数,不然this指向有问题

this.btext = message

})

}

}

}

</script>

这样在子组件a里面点击函数就可以改变兄弟组件b里面的值了。

 

以上是 vue.js 兄弟组件传值 的全部内容, 来源链接: utcz.com/z/378601.html

回到顶部