Element-UI自学实践(一)

Element-UI实战指南

概述

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 / text
  • plain:是否朴素按钮,boolean
  • round:是否圆角按钮,boolean
  • circle:是否圆形按钮,boolean
  • disabled:是否禁用状态,boolean
  • icon:图标类名。
  • 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 / info
  • underline:是否下划线,boolean
  • disabled:是否禁用状态,boolean
  • href:原生 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:选中选项卡的 name
  • type:风格类型,cardborder-card
  • tab-position:选项卡所在位置,toprightbottomleft
<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会叫的狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值