1. 程式人生 > 其它 >專案實訓 week1 側邊選單欄和導航欄的初步編寫

專案實訓 week1 側邊選單欄和導航欄的初步編寫

側邊選單欄和導航欄的初步編寫

側邊選單欄

首先在componects/資料夾下建立新檔案NavgationMenu.vue

其中vue檔案template部分如下:

<template>
  <div id="NavigationMenu">
    <el-menu
        id="el-menu"
        default-active="2"
        :unique-opened="true"
        @select="menuSelect"
        background-color="#545c64"
        text-color="#fff"
        :router="true"
        active-text-color="#ffd04b">
      <el-submenu index="test">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>測試元件</span>
        </template>
        <el-menu-item index="/test/testComponent1">測試元件1</el-menu-item>
        <el-menu-item index="/test/testComponent2">測試元件2</el-menu-item>
      </el-submenu>
      <el-submenu index="null">
        <template slot="title">待編寫選單</template>
        <el-menu-item index="null ">待編寫子選單</el-menu-item>
      </el-submenu>
    </el-menu>
  </div>
</template>

採用element ui的el-menu元件,並使用router=true引數,表示使用 vue-router 的模式,啟用該模式會在啟用導航時以 index 作為 path 進行路由跳轉。

el-menu標籤下的el-menu-item標籤為子選單項,並支援無線巢狀。

導航欄

首先在componects/資料夾下建立新檔案HeaderBar.vue

其中vue檔案template部分如下:

<template>
  <div id="HeaderBar">
    <div id="left">
      <el-breadcrumb separator-class="el-icon-arrow-right">
        <!--        <el-breadcrumb-item :to="{ path: '/' }">首頁</el-breadcrumb-item>-->
        <el-breadcrumb-item>首頁</el-breadcrumb-item>
        <el-breadcrumb-item v-for="(item,index) in this.menuRoutes" :key="index">{{ item }}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div id="right">
      <div>待開發,留作登入登出及資訊顯示</div>
    </div>
  </div>
</template>

這裡使用element ui的el-breadcrumb元件,在傳入資料時,使用v-for解析$route物件中的meta資訊。

首先在watch中不斷監聽$route物件的變化

watch: {
  $route(val, oldVal) {
    let {meta} = val;
    let {title} = meta;
    this.menuRoutes = title.split("-").reverse();
  },
}

如果$route發生了變化,也就是路徑發生了變化,此時會拿到當前介面的title。

而在title中包含了這個元件的父子層級關係

{
  path:'test/testComponent1',
  name:'testComponent1',
  component:() => import('@/views/test/TestComponent1'),
  meta:{
    title:'測試元件1-測試元件',
  }
},

所以meta中title的資訊,我們可以通過"-"拆分成一個數組,傳遞給el-breadcrumb元件。

對於重新整理介面後的導航欄不顯示bug處理

因為元件中的監聽方法,只會在物件(即路徑)發生變化時呼叫,而直接通過瀏覽器重新整理路徑並沒有發生改變,所以不會呼叫watch中的監聽方法,所以需要在created()方法中進行處理

created() {
  let {meta} = this.$route;
  let {title} = meta;
  this.menuRoutes = title.split("-").reverse();
},

效果圖

最後編寫的結果如下: