保姆级教程:Spring Boot+Vue前后端分离开发:第二天
第二天任务概要
学习Element UI的使用
第一步:新建一个VUE工程
参考我之前的文章:
https://blog.csdn.net/qq_41567696/article/details/140696957
VUE2.0建议采用第一种方式创建
创建完成后,使用cd命令进入创建的项目文件夹,运行:
npm run serve
第二步:VUE安装ElementUI
使用idea导入刚才创建的Vue前端框架,打开终端,输入:
npm i element-ui -S
按回车进行安装:
打开node_modules目录,若出现下图中红色箭头所指的文件夹与信息,则安装成功。
打开src下的main.js文件
向里面添加红框中的代码,完全引入ElementUI组件
第三步:打开ElementUI官网,进行代码参考
输入网址:
https://element.eleme.cn/#/zh-CN
打开,跳转到“组件”->"Container 布局容器"选择页面布局
做一个管理系统一般使用以下布局:
往下拉,找到相应的实例,点击实例下面的箭头,打开代码:
找到代码之后,进行复制,并粘贴到我们的Vue工程里的App.vue中:
App.vue代码:
<template>
<div id="app">
<el-container style="height: 500px; border: 1px solid #eee">
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu :default-openeds="['1', '3']" :default-active="'1-1'">
<el-submenu index="1">
<template slot="title"><i class="el-icon-message"></i>导航一</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">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<el-submenu index="2">
<template slot="title"><i class="el-icon-menu"></i>导航二</template>
<el-menu-item-group>
<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-group>
<el-menu-item-group title="分组2">
<el-menu-item index="2-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="2-4">
<template slot="title">选项4</template>
<el-menu-item index="2-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<el-submenu index="3">
<template slot="title"><i class="el-icon-setting"></i>导航三</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="3-1">选项1</el-menu-item>
<el-menu-item index="3-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="3-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="3-4">
<template slot="title">选项4</template>
<el-menu-item index="3-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
</el-menu>
</el-aside>
<el-container>
<el-header style="text-align: right; font-size: 12px">
<el-dropdown>
<i class="el-icon-setting" style="margin-right: 15px"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>查看</el-dropdown-item>
<el-dropdown-item>新增</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<span>王小虎</span>
</el-header>
<el-main>
<el-table :data="tableData">
<el-table-column prop="date" label="日期" width="140">
</el-table-column>
<el-table-column prop="name" label="姓名" width="120">
</el-table-column>
<el-table-column prop="address" label="地址">
</el-table-column>
</el-table>
</el-main>
</el-container>
</el-container>
</div>
</template>
<style>
.el-header {
background-color: #B3C0D1;
color: #333;
line-height: 60px;
}
.el-aside {
color: #333;
}
</style>
<script>
export default {
data() {
const item = {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
};
return {
tableData: Array(20).fill(item)
}
}
};
</script>
终端运行,打开浏览器查看,效果如下:
重要标签解释如下:
#构建整个页面框架
<el-container></el-container>
#构建左侧菜单
<el-aside></el-aside>
:default-openeds="['i', 'j']" #默认展开id为i与id为j的菜单
:default-active="'i-j'" #默认选中id为i-j的菜单
<el-submenu index="i-j"> #可展开的菜单。index为字符串类型。
<el-menu-item>子菜单栏</el-menu-item>
</el-submenu>
<template></template> #对应el-submenu的菜单名,用于描述内容
<i class="el-icon-menu"></i> #设置相应图标
<el-menu-item></el-menu-item> #不可再展开的子节点
第四步:通过Vue router动态加载菜单
假如菜单格式定义如下:
导航1
----页面1
----页面2
导航2
----页面3
----页面4
首先在views中创建4个vue文件,分别是:Page1.vue,Page2.vue,Page3.vue,Page4.vue,同时加上相应标题:
<h1>这是页面i</h1>
然后打开“src/router/”下的index.js,进行文件导入与代码编写:
添加路由:
为了将每个Page文件的信息进行显示,因此重写App.vue代码:
在中添加:
<router-view></router-view>
index.js完整代码如下:
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Page1 from "../views/Page1.vue";
import Page2 from "../views/Page2.vue";
import Page3 from "../views/Page3.vue";
import Page4 from "../views/Page4.vue";
import App from "../App";
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: '导航1',
component: App,
children:[
{
path: '/Page1',
name: '页面1',
component: Page1
},
{
path: '/Page2',
name: '页面2',
component: Page2
}
]
},
{
path: '/navigation',
name: '导航2',
component: App,
children:[
{
path: '/Page3',
name: '页面3',
component: Page3
},
{
path: '/Page4',
name: '页面4',
component: Page4
}
]
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
App.vue完整代码如下:
<template>
<div id="app">
<el-container style="height: 500px; border: 1px solid #eee">
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<!-- 动态读取src/router中index.js里的菜单名称 -->
<el-menu>
<el-submenu v-for="(item,index) in $router.options.routes" :index="index+''"><!--第一个router可以简单理解为src/router,第三个router指index.js中的routes数组。index是item的下标-->
<template slot="title"><i class="el-icon-setting">{{item.name}}</i></template><!--获取每一项的名称,即表格名称-->
<el-menu-item v-for="(item1,index1) in item.children" :index="index+'-'+index1">
<template slot="title"><i class="el-icon-setting">{{item1.name}}</i></template><!--获取每一项的名称,即表格名称-->
</el-menu-item>
</el-submenu><!--通过for循环读取菜单里的数据-->
</el-menu>
</el-aside>
<el-container>
<el-header style="text-align: right; font-size: 12px">
<el-dropdown>
<i class="el-icon-setting" style="margin-right: 15px"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>查看</el-dropdown-item>
<el-dropdown-item>新增</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<span>王小虎</span>
</el-header>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</div>
</template>
<style>
.el-header {
background-color: #B3C0D1;
color: #333;
line-height: 60px;
}
.el-aside {
color: #333;
}
</style>
<script>
export default {
data() {
const item = {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
};
return {
tableData: Array(20).fill(item)
}
}
};
</script>
未完待续,马上出第三天内容~