方法一
先由A子组件通过 $emit 传值给父组件
再由父组件通过事件接收传给B子组件
最后由B组件通过 props 接收传值
使用场景:管理后台的头部(Header)和左边导航栏(Aside)分别为子组件,并且同时被Home组件引用,我们头部组件上面要显示 面包屑 功能,选中哪个导航栏 面包屑 就显示对应的导航栏名称。
注意:这里我用了 element-ui 框架

Aside组件
1 | <template> |
Home组件
1 | <template> |
Header组件
1 | <template> |
方法二
兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据
创建一个Vue的实例,让各个兄弟共用同一个事件机制。
传递数据方,通过一个事件触发bus.$emit(方法名,传递的数据)。
接收数据方,通过mounted(){}触发bus.$on(方法名,function(接收数据的参数){用该组件的数据接收传递过来的数据}),此时函数中的this已经发生了改变,可以使用箭头函数。

我们可以创建一个单独的js文件eventBus.js,内容如下
1 | import Vue from 'vue' |
Aside组件
1 | <template> |
Header组件
1 | <template> |
方法三
通过 vuex 状态管理来实现兄弟组件间传值,直接上代码
Header组件
1 | <template> |
Aside组件
1 | <template> |
store.js
1 | import Vue from 'vue'; |
以上代码你可以直接复制粘贴自己跑一下试试!
或者直接clone我的代码 https://github.com/hutaoao/vue_study
代码里面包含父子组件传值、路由嵌套重定向等。