布局

vue-mooc布局方式我们采用最普遍的header + main + footer的形式,它们的基础框架如下所示:

header
main
sidebar

html代码:

<mooc-container>
  <mooc-header>header</mooc-header>
  <mooc-main>main</mooc-main>
  <mooc-footer>footer</mooc-footer>
</mooc-container>
<div class="layout-sidebar">sidebar</div>

我们将对以上布局具体的业务含义进行如下解释:

  • header:放置公共头部,包含logo,导航,搜索和登录等模块。
  • main:放置路由部分,即:router-view
  • footer:放置底部版权等相关信息。
  • sidebar:放置侧边栏信息。

封装布局公共组件

布局公共组件借鉴了element-ui中的布局容器,根据项目实际情况进行的改造,并没有百分百实现element-ui中布局容器组件的功能。

针对以上布局方式的要求,我们借鉴element-ui中关于布局容器的组件,进行如下封装

  • mooc-container对应el-container
  • mooc-header对应el-header
  • mooc-main对应el-main
  • mooc-footer对应el-foooter

如果你对改造后布局容器组件感兴趣的话,那么你可以在src/base/containersrc/base/headersrc/base/mainsrc/base/footer等目录找到它们。

使用布局公共组件

由于所有公共组件已经全部全局注册,所以我们只需要在App.vue文件中使用即可,像下面这样:

App.vue中的代码在这里只做示例使用,其代码会在涉及到的模块中一一介绍。

html代码:

<template>
  <div id="app" :style="getStyle">
    <!-- content -->
    <mooc-container>
      <mooc-header height="72px">
        <m-header />
      </mooc-header>
      <mooc-main>
        <router-view />
      </mooc-main>
      <mooc-footer height="120px">
        <m-footer />
      </mooc-footer>
    </mooc-container>
    <!-- sidebar -->
    <m-sidebar />
    <!-- back to top -->
    <mooc-backtop :show-height="500"></mooc-backtop>
    <!-- login -->
    <login v-if="showLogin" @maskClick="handleMaskClick" />
  </div>
</template>

JavaScript代码:

import MHeader from 'components/header/index.vue'
import MFooter from 'components/footer/footer.vue'
import MSidebar from 'components/sidebar/sidebar.vue'
import { mapGetters, mapMutations } from 'vuex'
import { scrollMixin } from 'assets/js/mixin.js'
export default {
  name: 'App',
  mixins: [scrollMixin],
  computed: {
    getStyle () {
      return {
        'max-height': this.showLogin ? '100%' : '',
        'overflow': this.showLogin ? 'hidden' : ''
      }
    },
    ...mapGetters(['showLogin'])
  },
  methods: {
    handleMaskClick () {
      this.setShowLogin(!this.showLogin)
    },
    ...mapMutations({
      'setShowLogin': 'login/SET_SHOW_LOGIN'
    })
  },
  components: {
    MHeader,
    MFooter,
    MSidebar,
    Login: () => import('components/login/login.vue')
  }
}
最后更新时间: 11/19/2019, 11:48:45 PM