需求:爲了實現菜單摺疊的效果,例如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