需求:为了实现菜单折叠的效果,例如http://blog.gdfengshuo.com/example/work/#/dashboardvue
header组件和sliderbar组件都是main组件下面的子组件,二者为兄弟关系。ide
现有下面的思路:this
点击折叠按钮,触发事件,让main组件和sliderbar组件 分别改变各自的样式。spa
即:兄弟组件通讯.net
import Vue from 'vue'; // 使用 Event Bus const bus = new Vue(); export default bus;
header.vuecode
<div class="collapse-btn" @click="collapseChage"> <i class="el-icon-menu"></i> </div> <script> import bus from '../common/bus'; // bie忘记引入 我没有挂载到vue实例上,须要本身引入 export default { data() { return { collapse: false } }, methods:{ // 侧边栏折叠 collapseChage(){ this.collapse = !this.collapse; bus.$emit('collapse', this.collapse); } } } </script>
<el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" background-color="#324157" text-color="#bfcbd9" active-text-color="#20a0ff" unique-opened router> </el-menu> <script> import bus from '../common/bus'; // bie忘记引入 我没有挂载到vue实例上,须要本身引入 export default { data() { return { collapse: false } }, created(){ // 经过 Event Bus 进行组件间通讯,来折叠侧边栏 bus.$on('collapse', msg => { this.collapse = msg; }) } } </script>
VUE 爬坑之旅-- eventBus 事件总线的基本使用和重复触发事件问题的解决router