从0到1完成一个Vue后台管理项目(八、Menu改造完善、子组件创建、配置路由)

往期

从0到1完成一个Vue后台管理项目(一、创建项目)

从0到1完成一个Vue后台管理项目(二、使用element-ui)

从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库)

从0到1完成一个Vue后台管理项目(四、引入axios、配置路由)

从0到1完成一个Vue后台管理项目(五、登录页(表单校验的使用和封装))

从0到1完成一个Vue后台管理项目(五、登录页,mock,token,axios封装)

从0到1完成一个Vue后台管理项目(六、404页)

从0到1完成一个Vue后台管理项目(七、Header、Footer、页面布局)

引入element-ui导航布局

代码

<template>
  <div class="menu">
    <el-aside width="200px">
      <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" background-color="#2578b5" text-color="#fff" active-text-color="#ffd04b">
        <el-submenu index="1">
          <template slot="title">
            <i class="el-icon-location"></i>
            <span>导航一</span>
          </template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="1-1">选项1</el-menu-item>
            <el-menu-item index="1-2">选项2</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="分组2">
            <el-menu-item index="1-3">选项3</el-menu-item>
          </el-menu-item-group>
          <el-submenu index="1-4">
            <template slot="title">选项4</template>
            <el-menu-item index="1-4-1">选项1</el-menu-item>
          </el-submenu>
        </el-submenu>
        <el-menu-item index="2">
          <i class="el-icon-menu"></i>
          <span slot="title">导航二</span>
        </el-menu-item>
        <el-menu-item index="3" disabled>
          <i class="el-icon-document"></i>
          <span slot="title">导航三</span>
        </el-menu-item>
        <el-menu-item index="4">
          <i class="el-icon-setting"></i>
          <span slot="title">导航四</span>
        </el-menu-item>
      </el-menu>
    </el-aside>
  </div>
</template>


<script>
export default {
  data() {
    return {}
  },
  methods: {
    handleOpen(key, keyPath) {
      console.log(key, keyPath)
    },
    handleClose(key, keyPath) {
      console.log(key, keyPath)
    }
  }
}
</script>


<style lang="scss" scoped>
.menu {
  .el-aside {
    height: 100%;
    .el-menu {
      height: 100%;
      .el-submenu .el-menu-item {
        min-width: 0;
      }
    }
  }
}
</style>

展示
在这里插入图片描述
这样我们就得到了一个常规的后台管理布局

改造

我们稍微改造一下,删除多余的代码
在这里插入图片描述
结果
在这里插入图片描述

添加Menu子组件

我们的Menu菜单,点开每一下,右侧会展示对应内容,所以毫无疑问,我们的Menu是需要子组件的

components下建立如图所示的文件夹和.vue组件,并初始化一下

在这里插入图片描述

配置路由

我们要给对应的子组件配置对应的路由

import { Icon } from "element-ui";
import Vue from "vue";
import Router from "vue-router";


Vue.use(Router)


export default new Router({
  routes: [
    {
      path: '/',
      redirect: '/login',
      component: () => import('@/components/Login')
    },
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/components/Login')
    },
    {
      path: '*',
      name: 'NotFound',
      component: () => import('@/components/404.vue')
    },
    // {
    //   path: '/home',
    //   // component: () => import('@/components/Home')//路由懒加载
    //   component: resolve => require(['@/components/Home'], resolve)
    // },
    {
      path: '/home',
      name: '学生管理',
      iconClass: 'fa fa-users',
      redirect: '/home/student',
      component: () => import('@/components/Home'),
      children: [
        {
          path: '/home/student',
          name: '学生列表',
          iconClass: 'fa fa-list',
          component: () => import('@/components/students/StudentList')
        },
        {
          path: '/home/info',
          name: '信息列表',
          iconClass: 'fa fa-list-alt',
          component: () => import('@/components/students/InfoList')
        },
        {
          path: '/home/infos',
          name: '信息管理',
          iconClass: 'fa fa-list-alt',
          component: () => import('@/components/students/InfoLists')
        },
        {
          path: '/home/work',
          name: '作业列表',
          iconClass: 'fa fa-list-ul',
          component: () => import('@/components/students/WorkList')
        },
        {
          path: '/home/works',
          name: '作业管理',
          iconClass: 'fa fa-th-list',
          component: () => import('@/components/students/WorkMent')
        },
      ]
    },
    {
      path: '/home',
      name: '数据分析',
      iconClass: 'fa fa-bar-chart',
      component: () => import('@/components/Home'),
      children: [
        {
          path: '/home/dataview',
          name: '数据概览',
          iconClass: 'fa fa-line-chart',
          component: () => import('@/components/dataAnalysis/DataView')
        },
        {
          path: '/home/mapview',
          name: '地图概览',
          iconClass: 'fa fa-line-chart',
          component: () => import('@/components/dataAnalysis/MapView')
        },
        {
          path: '/home/travel',
          name: '旅游地图',
          iconClass: 'fa fa-line-chart',
          component: () => import('@/components/dataAnalysis/TravelMap')
        },
        {
          path: '/home/score',
          name: '分数地图',
          iconClass: 'fa fa-line-chart',
          component: () => import('@/components/dataAnalysis/ScoreMap')
        },
      ]
    },
    {
      path: '/users',
      name: '用户中心',
      iconClass: 'fa fa-user',
      component: () => import('@/components/Home'),
      children: [
        {
          path: '/users/user',
          name: '权限管理',
          iconClass: 'fa fa-user',
          component: () => import('@/components/users/User')
        }
      ]
    }
  ],
  mode: 'history'
})

这里的iconClass是为了给我们的菜单项配置对应的图标

改造Menu.vue

在这里插入图片描述

我们打印可以发现路由的信息已经存在了

在这里插入图片描述
在这里插入图片描述
我们根据路由进行菜单项渲染
在这里插入图片描述

我们发现已经显示出来了
但是有的不是我们想要的,比如404,怎么办

hidden:true

我们在路由添加hidden:true的配置项,然后在Menu设置v-if即可

在这里插入图片描述

在这里插入图片描述

展示

在这里插入图片描述

显示图标

还记得我们配置的iconClass吗,现在要用了

在这里插入图片描述
展示成功
在这里插入图片描述

配置子组件

我们现在发现,我们点击对应项,子组件的路由没有跟着变化,这就需要我们配置一下
在这里插入图片描述

设置路由出口

在这里插入图片描述
在这里插入图片描述
这样我们内容就可以跟着路由变化了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多多@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值