项目实训 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();
},
效果图
最后编写的结果如下:


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号