8. Vue router-view页面布局

2022-04-30  本文已影响0人  zouhao1985

1.概述

常见的管理系统都有一个树形的菜单,在日常开发中,这个一般是以模板的形式存在,开发人员只要开发对应的业务页面就可以了,无须考虑通用的菜单模板。今天对vue-router实现的模板功能进行说明。
首先管理系统都有一个登陆界面,这个登陆界面是没有菜单的;登陆到系统首页的时候才会有菜单。本章节的内容就说明这两个页面的实现。

2.vue-router实现

实现过程中,我们可以认为登录页是不需要模板的;而系统首页是需要一个模板(不用模板的话,开发其他业务功能界面就需要复制菜单的代码),这里我们使用到了vue-router配置属性children。

关键代码如下:

# src/router/login.js
const routes = [
  {
    path: "/login",
    component: () => import("../view/login/Login"),
  },
  {
    path: "/menu",
    component: () => import("@/view/Menu"),
  },
  {
    path: "/dashboard",
    component: () => import("@/view/Layout"),  // 模板页面
    children: [
      {
        path: 'dashboard1',
        name: 'dashboard1',
        component: () => import("@/view/Dashboard")
      }
    ]
  },
];
export default routes;

模板页面,这里使用了elementUI

# src/view/Layout.vue
<template>
  <div>
    <el-container>
      <el-header>
        <el-menu
          class="el-menu-demo"
          mode="horizontal"
          background-color="#545c64"
          text-color="#fff"
          active-text-color="#ffd04b"
          @select="test"
        >
          <el-menu-item index="1"
            ><router-link to="/dashboard/dashboard2"
              >处理中心</router-link
            ></el-menu-item
          >
          <el-submenu index="2">
            <template slot="title">我的工作台</template>
            <el-menu-item index="2-1">选项1</el-menu-item>
            <el-menu-item index="2-2">选项2</el-menu-item>
            <el-menu-item index="2-3">选项3</el-menu-item>
            <el-submenu index="2-4">
              <template slot="title">选项4</template>
              <el-menu-item index="2-4-1">选项1</el-menu-item>
              <el-menu-item index="2-4-2">选项2</el-menu-item>
              <el-menu-item index="2-4-3">选项3</el-menu-item>
            </el-submenu>
          </el-submenu>
          <el-menu-item index="3"><router-link to="/menu"
              >消息中心</router-link
            ></el-menu-item>
          <el-menu-item index="4"
            ><a href="https://www.ele.me" target="_blank"
              >订单管理</a
            ></el-menu-item
          >
        </el-menu>
      </el-header>
      <el-main>
        <router-view></router-view>
      </el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </div>
</template>

<script>
export default {
  name: "Layout",
  data() {
    return {
      //   activeIndex: "1",
      activeIndex2: "1",
    };
  },
  methods: {
    test() {
      console.log('test')
    },
    handleSelect(key, keyPath) {
      console.log(key, keyPath)
    }
  }
}
</script>

3.总结

从路由的配置中可以看到,login页面是没有children属性,所以它直接展示对应的login页面。但是dashboard页面有使用了一个模板,在dashboard中的内容展示在Layout页面的router-view标签中。
如果开发其他的业务功能页面(需要登陆),就可以把页面放在dashboard的children元素中,这样就可以复用菜单的功能了。
如果系统中有不同的模块,其菜单布局不一样,那么可以在router配置中先定义不同的模块,配置不同的模板,对应的页面放在不同的模块中。

4.源代码下载

https://gitee.com/animal-fox_admin/learn-vue-web
branch:lesson5

上一篇下一篇

猜你喜欢

热点阅读