概述
Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。本文为自学实践记录,详细内容见 📚 ElementUI官网
1. 基础组件
用于构建页面的基本结构,比如布局(Layout)、容器(Container)、图标(Icon)、按钮(Button)、文字链接(Link)等。
Layout 布局
通过基础的 24 分栏,迅速简便地创建布局。
<template>
<div>
<el-row :gutter="20">
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
</el-row>
</div>
</template>
<script>
export default {
name: "HomeView",
};
</script>
<style>
.el-col {
border-radius: 4px;
}
.bg-purple {
background: #d3dce6;
}
.grid-content {
border-radius: 4px;
min-height: 36px;
}
</style>

<el-row>gutter:指定每一栏之间的间隔,默认间隔为 0。
<el-col>span:指定栅格占据的列数
Container 布局容器
快速搭建页面的基本结构
<template>
<div>
<el-container>
<el-aside>Aside</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
</el-container>
</el-container>
</div>
</template>
<script>
export default {
name: "HomeView",
};
</script>
<style>
.el-header {
background-color: #6da5ee;
}
.el-aside {
background-color: #b3c0d1;
}
.el-main {
background-color: #476d9e;
}
.el-footer {
background-color: #213e64;
}
</style>

<el-container>:外层容器。当子元素中包含<el-header>或<el-footer>时,全部子元素会垂直上下排列,否则会水平左右排列。<el-header>:顶栏容器。<el-aside>:侧边栏容器。<el-main>:主要区域容器。<el-footer>:底栏容器。
实例:
<template>
<div>
<el-container style="height: 500px; border: 1px solid #eee">
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu>
<el-submenu index="1">
<template slot="title">
<i class="el-icon-message"></i>导航一
</template>
<el-menu-item index="1-1">选项1-1</el-menu-item>
<el-submenu index="1-2">
<template slot="title">选项1-2</template>
<el-menu-item index="1-2-1">选项1-2-1</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="2">选项2</el-menu-item>
</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>
<script>
export default {
name: "HomeView",
data() {
const item = {
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
};
return {
tableData: Array(20).fill(item),
};
},
};
</script>
<style>
.el-header {
background-color: #b3c0d1;
color: #333;
line-height: 60px;
}
.el-aside {
color: #333;
}
</style>

Icon 图标
<i> 直接通过设置类名为 el-icon-iconName 来使用即可。
<template>
<div>
<i class="el-icon-edit"></i>
<i class="el-icon-share"></i>
<i class="el-icon-delete"></i>
<el-button type="primary" icon="el-icon-search">搜索</el-button>
</div>
</template>
<script>
export default {
name: "HomeView",
};
</script>

图标详见 Icon 图标
Button 按钮
<el-button> 标签使用按钮, <el-button-group>标签为按钮分组。
<template>
<div>
<el-row>
<h3>默认按钮</h3>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<el-row>
<h3>朴素按钮</h3>
<el-button plain>朴素按钮</el-button>
<el-button type="primary" plain>主要按钮</el-button>
<el-button type="success" plain>成功按钮</el-button>
</el-row>
<el-row>
<h3>圆角按钮</h3>
<el-button round>圆角按钮</el-button>
<el-button type="primary" round>主要按钮</el-button>
<el-button type="success" round>成功按钮</el-button>
</el-row>
<el-row>
<h3>图标按钮</h3>
<el-button icon="el-icon-search" circle></el-button>
<el-button type="primary" icon="el-icon-edit" circle></el-button>
<el-button type="success" icon="el-icon-check" circle></el-button>
<el-button type="danger" icon="el-icon-delete" circle></el-button>
</el-row>
<el-row>
<h3>文字按钮</h3>
<el-button type="text">文字按钮</el-button>
</el-row>
<el-row>
<h3>文字图标</h3>
<el-button type="primary" icon="el-icon-edit"></el-button>
<el-button type="primary" icon="el-icon-search">搜索</el-button>
<el-button type="primary">
上传<i class="el-icon-upload el-icon--right"></i>
</el-button>
</el-row>
<el-row>
<h3>按钮组</h3>
<el-button-group>
<el-button type="primary" icon="el-icon-edit"></el-button>
<el-button type="primary" icon="el-icon-share"></el-button>
<el-button type="primary" icon="el-icon-delete"></el-button>
</el-button-group>
</el-row>
</div>
</template>
<script>
export default {
name: "HomeView",
};
</script>
<style>
.el-row {
margin: 5px;
}
</style>

常用属性:
type:类型,primary / success / warning / danger / info / textplain:是否朴素按钮,booleanround:是否圆角按钮,booleancircle:是否圆形按钮,booleandisabled:是否禁用状态,booleanicon:图标类名。size:尺寸,medium / small / mini
Link 文字链接
文字超链接 <el-link>
<template>
<div>
<el-row>
<h3>文字链接</h3>
<el-link href="https://element.eleme.io" target="_blank">默认链接</el-link>
<el-link type="primary">主要链接</el-link>
<el-link type="success">成功链接</el-link>
<el-link type="danger">危险链接</el-link>
</el-row>
<el-row>
<h3>下划线</h3>
<el-link :underline="false">无下划线</el-link>
<el-link>有下划线</el-link>
</el-row>
<el-row>
<h3>带图标文字链接</h3>
<el-link icon="el-icon-edit">编辑</el-link>
<el-link> 查看<i class="el-icon-view el-icon--right"></i> </el-link>
</el-row>
</div>
</template>
<script>
export default {
name: "HomeView",
};
</script>
<style>
.el-row {
margin: 5px;
}
.el-link {
margin: 5px;
}
</style>

常用属性:
type:类型,primary / success / warning / danger / infounderline:是否下划线,booleandisabled:是否禁用状态,booleanhref:原生 href 属性icon:图标类名
2. 导航组件
导航组件用于创建各种导航菜单和路由,包括菜单(NavMenu)、面包屑(Breadcrumb)、页签(Tabs)、下拉菜单(Dropdown)、步骤条(Steps)等。
NavMenu 导航菜单
<el-menu> 为网站提供导航功能的菜单。导航菜单默认为垂直模式,通过 mode 属性可以使导航菜单变更为 horizontal 水平模式。
background-color:菜单的背景色text-color:菜单的文字颜色active-text-color:当前激活菜单的文字颜色collapse:是否水平折叠收起菜单router:是否使用vue-router的模式,启用该模式会在激活导航时以index作为path进行路由跳转
<el-menu-item> 组件提供单级菜单,index 设置唯一标志,route 设置 Vue Router 路径对象。
<el-submenu> 组件可以生成二级菜单,index 设置唯一标志。
<el-menu-item-group> 组件可以实现菜单进行分组,分组名可以通过 title 属性直接设定,也可以通过具名 slot 来设定。
<template>
<div>
<h3>horizontal-水平模式</h3>
<el-menu
:default-active="activeIndex"
class="el-menu-demo"
mode="horizontal"
@select="handleSelect"
>
<el-menu-item index="1">处理中心</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" disabled>消息中心</el-menu-item>
<el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
</el-menu>
<h3>自定义颜色-折叠</h3>
<el-radio-group v-model="isCollapse" style="margin-bottom: 20px">
<el-radio-button :label="false">展开</el-radio-button>
<el-radio-button :label="true">收起</el-radio-button>
</el-radio-group>
<el-menu
:collapse="isCollapse"
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b"
>
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>导航一</span>
</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">选项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>
</div>
</template>
<script>
export default {
name: "HomeView",
data() {
return {
activeIndex: "1",
isCollapse: true,
};
},
methods: {
handleSelect(key, keyPath) {
console.log(key, keyPath);
},
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
},
},
};
</script>
<style>
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 200px;
min-height: 400px;
}
</style>

组件递归
📖 vue组件递归
📖 element多层导航菜单
基于 element 导航菜单实现多层菜单,判断 children 有没有内容,children 没内容就是叶子节点 <el-menu-item>,有内容就是父菜单 <el-submenu>。
treeMenus 组件
<template>
<div>
<template v-for="(item,index) in list">
<template v-if="item.children.length">
<el-submenu :key="index" :index="item.index">
<template :index="item.index" slot="title">
<i :class="item.icon"></i>
<span>{
{item.name}}</span>
</template>
<treeMenus :list="item.children"></treeMenus>
</el-submenu>
</template>
<template v-else>
<el-menu-item :key="index" :index="item.index">
<i :class="item.icon"></i>
<span>{
{item.name}}</span>
</el-menu-item>
</template>
</template>
</div>
</template>
<script>
export default {
name: "treeMenus",
props: {
list: Array
}
};
</script>
调用
<template>
<div>
<el-menu
:collapse="isCollapse"
class="el-menu-vertical-demo"
@select="handleSelect"
>
<treeMenus :list="treeMenusData"></treeMenus>
</el-menu>
</div>
</template>
<script>
import treeMenus from "../views/treeMenus.vue";
export default {
name: "HomeView",
components: {
treeMenus,
},
data() {
return {
isCollapse: false,
treeMenusData: [
{
name: "菜单1",
index: "menu1",
icon: "el-icon-menu",
children: [
{
name: "菜单1-1",
index: "menu1-1",
icon: "el-icon-menu",
children: [
{
name: "菜单1-1-1",
index: "menu1-1-1",
icon: "el-icon-menu",
children: [],
},
{
name: "菜单1-1-2",
index: "menu1-1-2",
icon: "el-icon-menu",
children: [],
},
],
},
{
name: "菜单1-2",
index: "menu1-2",
icon: "el-icon-menu",
children: [],
},
],
},
{
name: "菜单2",
index: "menu2",
icon: "el-icon-document-copy",
children: [
{
name: "数据集管理",
index: "dataset",
icon: "el-icon-document-copy",
children: [],
},
],
},
{
name: "菜单3",
index: "menu3",
icon: "el-icon-folder",
children: [],
},
],
};
},
methods: {
handleSelect(key, keyPath) {
console.log(key, keyPath);
}
}
};
</script>
<style>
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 200px;
min-height: 400px;
}
</style>

Tabs 标签页
<el-tabs> 分隔内容上有关联但属于不同类别的数据集合。
value / v-model:选中选项卡的 nametype:风格类型,card、border-cardtab-position:选项卡所在位置,top、right、bottom、left
<template>
<div>
<h3>基础用法</h3>
<el-tabs v-model="activeName1" @tab-click="handleClick">
<el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
<el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
</el-tabs>
<h3>选项卡样式</h3>
<el-tabs v-model="activeName2" @tab-click="handleClick" type="card">
<el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
<el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
</el-tabs>
<h3>卡片化</h3>
<el-tabs v-model="activeName3" @tab-click="handleClick" type="border-card">
<el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
<el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
</el-tabs>
<h3>位置</h3>
<el-tabs v-model="activeName4" @tab-click="handleClick" type="border-card" :tab-position="tabPosition">
<el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
<el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
</el-tabs>
<h3>自定义标签页</h3>
<el-tabs v-model="activeName5" @tab-click="handleClick" type="border-card">
<el-tab-pane name="first">
<template slot="label">
<i class="el-icon-user"></i>
<span>用户管理</span>
</template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
Element-UI实战指南

最低0.47元/天 解锁文章
1594

被折叠的 条评论
为什么被折叠?



