一、概述
一般后台頁面的頂部導航欄和左側導航欄一般是固定的,我們可以布局成下面的樣式

二、整體項目布局
因為我們的首頁是個公共的組件,點擊首頁,會員管理,都不會變,所以我們可以放在一個單獨文件夾里面。
需要分別對頭部,左側區域,主區域拆分成不同的文件。
創建項目
創建一個全新的ElementUI 項目,請參考鏈接:
https://www.cnblogs.com/xiao987334176/p/14187889.html
在src目錄下,創建views文件夾,在里面再創建Layout文件夾,最后創建index.vue
最終src目錄結構如下:
./
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
├── main.js
├── router
│ └── index.js
└── views
└── Layout
└── index.vue
修改views/Layout/index.vue,完整內容如下:
<template>
<div>
<div class="header">頭部</div>
<div class="navbar">左側區域</div>
<div class="main">主區域</div>
</div>
</template>
<style scoped>
/* 頭部樣式 */
.header {
position: absolute;
line-height: 50px;
top: 0px;
left: 0px;
right: 0px;
background-color: #2d3a4b;
}
/* 左側樣式 */
.navbar {
position: absolute;
width: 200px;
top: 50px; /* 距離上面50像素 */
left: 0px;
bottom: 0px;
overflow-y: auto; /* 當內容過多時y軸出現滾動條 */
background-color: #545c64;
}
/* 主區域 */
.main {
position: absolute;
top: 50px;
left: 200px;
bottom: 0px;
right: 0px; /* 距離右邊0像素 */
padding: 10px;
overflow-y: auto; /* 當內容過多時y軸出現滾動條 */
/* background-color: red; */
}
</style>
修改router/index.js
import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' import Layout from '@/views/Layout' // 默認加載index.vue Vue.use(Router) export default new Router({ mode: 'history', //去掉url中的# routes: [ { path: '/', name: 'layout', // 路由名稱 component: Layout // 組件對象 } ] })
修改App.vue,注釋多余的代碼
<template> <div id="app"> <!-- <img src="./assets/logo.png">--> <router-view/> </div> </template> <script> export default { name: 'App' } </script> <style> /*#app {*/ /* font-family: 'Avenir', Helvetica, Arial, sans-serif;*/ /* -webkit-font-smoothing: antialiased;*/ /* -moz-osx-font-smoothing: grayscale;*/ /* text-align: center;*/ /* color: #2c3e50;*/ /* margin-top: 60px;*/ /*}*/ </style>
運行vue項目,訪問首頁,效果如下:

布局拆分
上面已經實現了3個區域的布局,現在需要將3個區域拆分成不同的vue文件,方便后續的維護。
在src/views/Layout目錄下,創建文件夾components,並在此文件夾創建3個文件AppHeader.vue,Appmain.vue,Appnavbar.vue
最終,src目錄結構如下:
./
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
├── main.js
├── router
│ └── index.js
└── views
└── Layout
├── components
│ ├── AppHeader.vue
│ ├── Appmain.vue
│ └── Appnavbar.vue
└── index.vue
views/Layout/components/AppHeader.vue
<template> <div class="header">頭部</div> </template> <script> export default { name: "AppHeader" } </script> <style scoped> </style>
views/Layout/components/Appmain.vue
<template> <div class="main">主區域</div> </template> <script> export default { name: "AppMain" } </script> <style scoped> </style>
views/Layout/components/Appnavbar.vue
<template> <div class="navbar">左側區域</div> </template> <script> export default { name: "AppNavbar" } </script> <style scoped> </style>
views/Layout/index.vue
<template>
<div>
<app-header></app-header>
<app-navbar></app-navbar>
<app-main></app-main>
</div>
</template>
<script>
import AppHeader from "./components/AppHeader"
import AppNavbar from "./components/AppNavbar"
import AppMain from "./components/AppMain"
// 導入子組件,縮寫格式 AppHeader: AppHeader
export default {
components: { AppHeader, AppNavbar, AppMain } // 有s
};
</script>
<style scoped>
/* 頭部樣式 */
.header {
position: absolute;
line-height: 50px;
top: 0px;
left: 0px;
right: 0px;
background-color: #2d3a4b;
}
/* 左側樣式 */
.navbar {
position: absolute;
width: 200px;
top: 50px; /* 距離上面50像素 */
left: 0px;
bottom: 0px;
overflow-y: auto; /* 當內容過多時y軸出現滾動條 */
background-color: #545c64;
}
/* 主區域 */
.main {
position: absolute;
top: 50px;
left: 200px;
bottom: 0px;
right: 0px; /* 距離右邊0像素 */
padding: 10px;
overflow-y: auto; /* 當內容過多時y軸出現滾動條 */
/* background-color: red; */
}
</style>
刷新我們的頁面,頁面還是之前的樣式,則我們的抽取沒有問題
本文參考鏈接:
https://www.cnblogs.com/zouzou-busy/p/13080665.html
