目錄:
- 實現動態面包屑
- 實現步驟
一、實現動態面包屑
1.1、點擊首頁只顯示首頁
1.2、點擊其他的頁面,顯示其他頁面
二、實現步驟
思路主要是通過Vuex 狀態改變的方式來實現的。
2.1、目錄結構
.... |-src ... |-store |-modules |-tab.js //創建vuex狀態管理 |-index.js |-views .... .....
2.2、tab.js的實現
const state = { menu: [], currentMenu: null }; const mutations = { selectMenu(state,val){ //val.name != 'home' ? state.currentMenu = val:state.currentMenu = null; if(val.name != 'home'){ state.currentMenu = val; }else { state.currentMenu = null; } } }; const actions = { }; export default { state, mutations, actions }
2.3、index.js導出
import Vue from 'vue' import Vuex from 'Vuex' import tab from './modules/tab.js' Vue.use(Vuex); export default new Vuex.Store({ modules: { tab } })
2.5、Aside.vue的編寫
說明:定義clickMenu方法,commit提交selectMenu方法,獲取菜單的值
<template> <!--background-color自定義顏色--> <el-menu default-active="2" class="el-menu-vertical-demo" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-menu-item :index="item.path" v-for="item in noChildren" :key="item.path" @click="clickMenu(item)"><!--綁定clickMenu方法,傳入參數item--> ..... </el-menu-item> <el-submenu index="item.path" v-for="(item,index) in hasChildren" :key="index"> ..... <el-menu-item-group><!--綁定clickMenu方法,傳入參數item--> <el-menu-item :index="subItem.path" v-for="(subItem,subIndex) in item.children" :key="subIndex" @click="clickMenu(subItem)">{{subItem.label}}</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </template> <script> export default { computed: {....}, data(){...}, methods: { clickMenu(item){ this.$store.commit('selectMenu',item) //commit 調用 tab.js中的 mutations中的selectMenu方法 } } } </script> <style scoped> .... </style>
2.4、Header.vue的編寫
說明:通過mapState獲取菜單的值
<template> <header> <div class="l-content"> .... <el-breadcrumb separator="/"> <el-breadcrumb-item :to="{ path: '/' }">首頁</el-breadcrumb-item> <el-breadcrumb-item :to="curent.path" v-if="curent">{{curent.label}}</el-breadcrumb-item> </el-breadcrumb> </div> ..... </header> </template> <script> import { mapState } from 'vuex' export default { computed: mapState({ curent: state => state.tab.currentMenu //直接獲取當前菜單的值,因為 tab.js在index.js中是modules中,不在公共組件中,所以要使用state.模塊名.屬性名 }), data(){.....} } } </script> <style scoped> .... </style> <style> .el-breadcrumb__item:last-child .el-breadcrumb__inner { /*面包屑除首頁之外的按鈕字體顏色*/ color: #f4f4f4; } .el-breadcrumb__inner a, .el-breadcrumb__inner.is-link{ /*面包屑除首頁字體顏色*/ color: #fff; } </style>