发布于2022-06-27 20:37 阅读(1104) 评论(0) 点赞(6) 收藏(4)
Vue + Element-UI —— 项目实战(零)(项目概述)
Vue + Element-UI —— 项目实战(八)(完结)
- 安装 Element:在项目路径下终端键入以下命令:
npm i element-ui -S
- (全局引入)引入并使用 Element:在
main.js
中通过 import 导入,通过 Vue.use(xxx) 全局使用。
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI)
- (按需引入)引入并使用 Element:在
main.js
中通过 import 导入指定
组件,通过 Vue.use(xxx) 使用该组件。
import {Button} from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(Button)
- 安装 babel-plugin-component 插件,已达到减小项目体积的目的。
npm install babel-plugin-component -D
- 如果使用了按需引入,则需要在
babel.config.js
中添加以下代码
- 通过终端键入
npm run build
,可以发现全局引入和按需引入,生成的打包文件 dist 的大小差距很大。使用按需引入
,会减少
项目的体积。
- 安装路由插件,终端键入如下代码。【注意 vue.js 对应 vue-router 的 3版本,要 vue-router@3,安装指定版本,否则会安装最新版本,导致错误】
npm i vue-router@3
- 创建 router 文件夹,并在该文件夹创建 index.js 文件进行路由相关配置
import Vue from "vue";
import VueRouter from "vue-router";
import Home from '../views/Home.vue'
import User from '../views/User.vue'
//全局引入VueRouter
Vue.use(VueRouter);
const routes = [
{
path: "/",
name: "Home",
component: Home,
},
{
path: '/user',
name: 'User',
component: User
}
];
// router用于接收VueRouter实例
const router = new VueRouter({
mode: "history",
routes,
});
//默认暴露
export default router;
- 创建 views 文件夹,在该文件夹下,创建 home 和 User 文件夹,在这两个文件夹下分别创建 index.vue
- 在 main.js 导入并使用路由
import Vue from "vue";
import App from "./App.vue";
import router from '../router'
new Vue({
render: h => h(App),
router
}).$mount('#app')
- 在 App 组件相应位置显示内容
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
- 安装 less 插件(本项目的样式为 less)
npm i less
- 安装插件 less 的解析器
npm i less-loader@6.0.0
- 对 Main.vue 写入布局(el-xxx 是 Elementui 的书写格式)
<el-container style="hight: 100%">
<el-aside width="auto">Aside</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
</el-container>
</el-container>
- 对 Main.vue 的 header 设置样式
<style lang="less" scoped>
.el-header{
background-color: #333;
}
.el-main{
padding: 0;
}
</style>
- 记得在 main.js 中按需引入
import {Button, Radio, Container, Main, Header, Aside} from 'element-ui';
Vue.use(Button)
Vue.use(Radio)
Vue.use(Container)
Vue.use(Main)
Vue.use(Header)
Vue.use(Aside)
- component(里面是公共文件) 文件夹下创建 CommonAside.vue,写入布局及样式。
<template>
<el-menu
default-active="1-4-1"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
:collapse="isCollapse"
>
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span slot="title">导航一</span>
</template>
<el-menu-item-group>
<span slot="title">分组一</span>
<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">
<span slot="title">选项4</span>
<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>
</template>
<script>
export default {
data() {
return {
isCollapse: true
};
},
methods: {
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
}
}
}
</script>
<style lang="less" scoped>
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 200px;
min-height: 400px;
}
</style>
- 记得在 main.js 中按需引入
【添加数据】
- 在 CommonAside.vue 的 data 中添加数据(用来做动态组件)
menu: [
{
path: "/",
name: "home",
label: "首页",
icon: "s-home",
url: "Home/Home",
},
{
path: "/mall",
name: "mall",
label: "商品管理",
icon: "video-play",
url: "MallManage/MallManage",
},
{
path: "/user",
name: "user",
label: "用户管理",
icon: "user",
url: "UserManage/UserManage",
},
{
label: "其他",
icon: "location",
children: [
{
path: "/page1",
name: "page1",
label: "页面1",
icon: "setting",
url: "Other/PageOne",
},
{
path: "/page2",
name: "page2",
label: "页面2",
icon: "setting",
url: "Other/PageTwo",
},
],
},
]
【渲染组件(分为一级菜单和二级菜单)】
- 在计算属性 computed 中定义函数
noChildren()
,过滤出没有子级的一级菜单
noChildren() {
//过滤出来没有子项目的数据
return this.menu.filter((item) => !item.children);
}
- v-for 遍历过滤出来的一级菜单,并在相应位置做出呈现
<el-menu-item v-for="item in noChildren" :index="item.path" :key="item.path">
<i :class="'el-icon-' + item.icon"></i>
<span slot="title">{{item.label}}</span>
</el-menu-item>
- 在计算属性 computed 中定义函数
hasChildren()
,过滤出有子级的菜单
hasChildren() {
//过滤出来有子项目的数据
return this.menu.filter((item) => item.children);
}
- v-for 遍历过滤出来的二级菜单,并在相应位置做出呈现
<el-submenu v-for="item in hasChildren" :index="item.path" :key="item.path">
<template slot="title">
<i :class="'el-icon-' + item.icon"></i>
<span slot="title">{{item.label}}</span>
</template>
<!-- 二级菜单 -->
<el-menu-item-group v-for="(subItem, subIndex) in item.children" :index="subIndex" :key="subItem.path">
<el-menu-item >{{subItem.label}}</el-menu-item>
</el-menu-item-group>
</el-submenu>
- CommonAside.vue 中设置样式:对侧边栏进行样式设置
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b"
......
.el-menu {
height: 100vh;
border: #fff;
h3 {
color: white;
text-align: center;
line-height: 48px;
}
}
- 路由配置:添加点击事件,进行路由的跳转
<el-menu-item @click='clickMenu(item)'></el-menu-item>
.......
clickMenu(item) {
this.$router.push({
name: item.name
})
}
不积跬步无以至千里 不积小流无以成江海
点个关注不迷路(持续更新中…)
原文链接:https://blog.csdn.net/qq_45902692/article/details/125079634
作者:大哥你来啦
链接:http://www.qianduanheidong.com/blog/article/377077/56ae8006e6836b81d643/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!