Vue3——UI组件库Element Plus(二)

UI组件库Element Plus

3、开关与滑块组件

开关是很常见的一种页面元素,有开和关两种状态来支持用户交互。在Element Plus中,使用el-switch来创建开关组件。开关组件的状态只有两种,如果需要使用连续状态的组件,则可以使用el-slider组件,这个组件能够渲染出进度条与滑块,用户可以方便地对进度进行调节。

3.1、开关组件

el-switch组件支持开发者对开关颜色、背景颜色等进行定制,常用属性列举如表所示。

属性 意义
disabled 设置是否禁用 布尔值
loading 设置是否加载中 布尔值
width 设置按钮的宽度 数值
active-text 设置开关打开时的文字描述 字符串
inactive-text 设置开关关闭时的文字描述 字符串
active-value 设置开关打开时的值 布尔值/字符串/数值
inactive-value 设置开关关闭时的值 布尔值/字符串/数值
active-color 设置开关打开是的背景色 字符串
inactive-color 设置开关关闭时的背景色 字符串
validate-event 改变开关状态时,是否触发表单校验 布尔值
before-change 开关状态之前调用的函数 函数
Change 开关状态发生变化后调用的函数 函数

下面的代码将演示几种基础的标签样式:

html 复制代码
<template>
  <div style="margin: 20px;">
    <el-switch
      v-model="switch1"
      active-text="会员"
      inactive-text="非会员"
      active-color="#00FF00"
      inactive-color="#FF0000">
    </el-switch>
    <el-switch
      v-model="switch2"
      active-text="加载中"
      :loading="true">
    </el-switch> 
    <el-switch
      v-model="switch3"
      inactive-text="禁用"
      :disabled="true">
    </el-switch>
  </div>
</template>

3.2、滑块组件

当页面元素有多种状态时,我们可以尝试使用滑块组件来实现。滑块组件既支持承载连续变化的值,也支持承载离散变化的值。同时,滑块组件还支持结合输入框一起使用,可谓非常强大。el-slider组件的常用属性列举如表所示。

属性 意义
min 设置滑块的最小值 数值
max 设置滑块的最大值 数值
disabled 设置是否禁用滑块 布尔值
step 设置滑块步长 数值
show-input 设置是否显示输入框 布尔值
show-input-controls 设置显示的输入框是否有控制按钮 布尔值
input-size 设置输入框尺寸 large small default
show-stops 是否显示间断点 布尔值
show-tooltip 是否显示刻度提示 布尔值
format-tooltip 对刻度信息进行格式化 函数
range 设置是否为范围选择模式 布尔值
vertical 设置是否为竖向模式 布尔值
height 设置竖向模式时滑块组件的高度 字符串
marks 设置标记 对象
change 滑块组件的值发生变化时调用的函数,只在鼠标拖动结束触发 函数
input 滑块组件的值发生变化时调用的函数,鼠标揉动过程中也会触发 函数

滑块组件默认的取值范围为0~100,我们几乎无须设置任何额外属性,就可以对滑块组件进行使用,例如:

html 复制代码
<script setup>
  import { ref, watch } from 'vue'
  const sliderValue = ref(50)
</script>

<template>
  <div style="margin: 20px;">
    <el-slider v-model="sliderValue"></el-slider> 
  </div>
</template>

可以看到,当我们对滑块进行拖动时,当前的值会显示在滑块上方,对于显示的文案,我们可以通过format-tooltip属性来进行定制。例如,要进行百分比显示,示例代码如下:

html 复制代码
     <el-slider v-model="sliderValue" :format-tooltip="format"></el-slider>

format函数实现如下:

js 复制代码
  const format = (value)=>{
    return `${value}%`
  }

如果滑块组件可选中的值为离散的,我们可以通过step属性来进行控制,在上面代码的基础上,若只允许选择以10%为间隔的值,示例代码如下:

html 复制代码
    <el-slider
       v-model="sliderValue"
       :format-tooltip="format"
       :step="10"
       :show-stops="true"
     ></el-slider>

如果设置了show-input属性的值为true,则页面还会渲染出一个输入框,输入框中输入的值与滑块组件的值之间是联动的,如图所示。

el-slider组件也支持进行范围选择,当我们需要让用户选中一段范围时,可以设置其range属性为true,效果如图所示。

最后,我们再来看一下el-slider组件的marks属性,这个属性可以为滑块的进度条配置一组标记,对于一些重要节点,还可以使用标记进行突出展示。示例代码如下:

html 复制代码
     <el-slider v-model="sliderValue" :marks="marks"></el-slider>

marks数据配置如下:

js 复制代码
  const marks = {
    0: '起点',
    50: '半程',
    90: {
      style: {color: '#ff0000'},
      label: '就到终点啦'
    }
  }

4、选择器组件

选择器组件的使用场景与选择列表类似,只是其场景更加定制化。Element Plus中提供了时间日期、颜色相关的选择器,在需要的场景中可以直接使用。

4.1、时间选择器

el-time-picker用来创建时间选择器,可以方便地供用户选择一个时间点或时间范围。el-time-picker中的常用属性列举如表所示。

属性 意义
readonly 设置是否只读 布尔值
disabled 设置是否禁用 布尔值
clearable 设置是否清晰显示按钮 布尔值
size 设置输入框尺寸 large small default
placeholder 设置占位内容 字符串
start-placeholder 在范围选择模式下,设置起始时间的占位内容 字符串
end-placeholder 在范围选择模式下,设置结束时间的占位内容 字符串
is-range 设置是否为范围选择模式 布尔值
arrow-control 设置是否使用箭头进行时间选择 布尔值
align 设置对齐方式 left center right
range-separator 设置范围选择时的分隔符 字符串
format 显示在输入框的时间格式 字符串,默认为HH:mm:ss
default-value 设置选择器打开时默认显示的时间 时间对象
prefix-icon 设置头部图标 字符串
clear-icon 自定义清空图标 字符串
disabledHours 禁止选择某些小时 函数
disabledMinutes 禁止选择某些分钟 函数
disabledSeconds 禁止选择某些秒 函数
change 用户选择的值发生变化时触发 函数
blur 输入框失去焦点时触发 函数
focus 输入框获取焦点时触发 函数

下面的代码将演示el-time-picker组件的基本使用方法。

html 复制代码
     <el-time-picker
       :is-range="true"
       v-model="time"
       range-separator="~"
       :arrow-control="true"
       start-placeholder="开始时间"
       end-placeholder="结束时间"
     >
     </el-time-picker>

注意,el-time-picker创建的时间选择器的样式是表格类型的,Element Plus框架中还提供了一个el-time-select组件,这个组件渲染出的选择器是列表样式的。

html 复制代码
  <el-time-select
    v-model="value"
    style="width: 240px"
    start="08:30"
    step="00:15"
    end="18:30"
    placeholder="Select time"
  />

4.2、日期选择器

el-time-picker提供了对时间选择的支持,如果还要选择日期,可以使用el-date-picker组件。此组件会渲染出一个日历视图,用户可以在日历视图上方便地进行日期选择。el-data-picker组件的常用属性列举如表所示。

属性 意义
readonly 设置是否只读 布尔值
disabled 设置是否禁用 布尔值
editable 设置本文框是否可编辑 布尔值
clearable 设置是否清晰显示按钮 布尔值
size 设置输入框组件的尺寸 large small default
placeholder 设置输入框的占位内容 字符串
start-placeholder 在范围选择模式下,设置起始日期的占位内容 字符串
end-placeholder 在范围选择模式下,设置结束日期的占位内容 字符串
type 日历的类型 year month date dates week datetime datetimerange daterange daterange monthrange
format 日期的格式 字符串,默认为YYYY-MM-DD
range-separator 设置分隔符 字符串
default-value 设置默认日期 Date对象
prefix-icon 设置头部图标 字符串
clear-icon 自定义清空图标 字符串
validate-event 输入时是否触发表单的校验 布尔值
disabledDatte 设置需要禁用的日期 函数
change 用户选择的值发生变化时触发 函数
blur 输入框失去焦点时触发 函数
focus 输入框获取焦点时触发 函数

el-data-picker组件的简单用法示例如下:

html 复制代码
     <el-date-picker
       v-model="date"
       type="daterange"
       range-separator="至"
       start-placeholder="开始日期"
       end-placeholder="结束日期"
       >
     </el-date-picker>

注意,当el-data-picker组件的type属性设置为datatime时,它同时支持选择日期和时间,使用非常方便。

4.3、颜色选择器

颜色选择器能够提供一个调色板组件,用户可以方便地在调色板上进行颜色的选择。在一些场景下,如果页面支持用户进行颜色定制,可以使用颜色选择器组件。颜色选择器使用el-color-picker创建,常用属性列举如表所示。

属性 意义
disabled 设置是否禁用 布尔值
size 设置尺寸 large small default
show-alpha 设置是否支持透明度选择 布尔值
color-format 设置颜色格式 hsl hsv hex rgb
predefine 设置预定义颜色 数组

颜色选择器的简单使用示例如下:

html 复制代码
     <el-color-picker :show-alpha="true" v-model="color"></el-color-picker>

5、提示类组件

Element Plus框架中提供了许多提示类的组件,这类组件在实际开发中应用非常频繁。当我们需要对某些用户的操作做出提示时,就可以使用这类组件。Element Plus框架中提供的提示类组件交互非常友好,主要包括警告组件、加载提示组件、消息提醒组件、通知和弹窗组件等。

5.1、警告组件

警告组件用来在页面上展示重要的提示信息,页面产生错误、用户交互处理产生失败等场景都可以使用警告组件来提示用户。警告组件使用el-alert创建,有4种类型,分别可以使用在操作成功提示、普通信息提示、行为警告提示和操作错误提示场景下。

el-alert警告组件的常用属性列举如表所示。

属性 意义
title 设置标题 字符串
type 设置类型 success warning info error
description 设置描述文案 字符串
closeable 设置是否可以关闭提示 布尔值
center 设置文本是否居中显示 布尔值
close-text 自定义关闭按钮的文本 字符串
show-icon 设置是否显示图标 布尔值
effect 设置主题 light dark
close 关闭提示时触发的事件 函数

下面的代码将演示不同类型的警告提示样式。

html 复制代码
     <el-alert title="成功提示的文案" type="success"> </el-alert>
     <br />
     <el-alert title="消息提示的文案" type="info"> </el-alert>
     <br />
     <el-alert title="警告提示的文案" type="warning"> </el-alert>
     <br />
     <el-alert title="错误提示的文案" type="error"> </el-alert>

单击提示栏上的"关闭"按钮,提示栏会自动被消除。

注意,el-alert是一种常驻的提示组件,除非用户手动单击"关闭"按钮,否则提示框不会自动关闭。

5.2、消息提示

5.2.1、简单提示ElMessage

Element Plus中提供了主动触发消息提示的方法,当触发消息提示时,页面顶部会出现一个提示栏,展示3秒后自动消失。简单示例如下:

html 复制代码
     <el-button @click="popTip">弹出信息提示</el-button>

实现popTip方法如下:

js 复制代码
<script setup>
  import { ref, watch } from 'vue'
  import {ElMessage} from 'element-plus'
  function popTip() {
    ElMessage({
      message: '提示内容',
      type: 'warning'
    })
  }
</script>

ELMessage是Element Plus中内置的方法,将其引入后可以直接使用。此方法的可配置参数列举如表所示。

参数名 意义
message 设置提示的消息文字 字符串或VNode
type 设置提示组件的类型 success warning info error
duration 设置展示时间 数值,单位为毫秒,默认为3000
showClose 是否展示关闭按钮 布尔值
center 设置文字是否居中 布尔值
onClose 提示栏关闭时回调的函数 函数
offset 设置出现提示栏的位置距离窗口顶部的偏移量 数值
5.2.2、复杂提示ElMessageBox

ELMessage方法适用于对用户进行简单提示的场景,如果需要进行用户交互,则Element Plus中提供了另一个ELMessageBox方法,此方法类似于系统的alert、confirm和prompt方法,可以进行用户交互。示例代码如下:

js 复制代码
<script setup>
  import { ref, watch } from 'vue'
  import {ElMessage, ElMessageBox} from 'element-plus'
  function popTip() {
    ElMessageBox({
      title: '提示',
      message: '详细的提示内容',
      type: 'warning',
      showCancelButton: true,
      showConfirmButton: true,
      showInput: true
    })
  }
</script>

ELMessageBox方法的可配置参数列举如表所示。

参数名 意义
title 设置提示框标题 字符串
message 设置提示框展示的信息 字符串
type 设置提示框类型 success info warning error
callback 用户交互的回调,当用户单击提示框上的按钮时触发 函数
showClose 设置是否展示关闭按钮 布尔值
beforeClose 提示框关闭前的回调 函数
lockScroll 是否在提示框出现时将页面滚动锁定 布尔值
showCancelButton 设置是否显示取消按钮 布尔值
showConfirmButton 设置是否显示确认按钮 布尔值
cancelButtonText 自定义取消按钮文本 字符串
confirmButtonText 自定义确认按钮的文本 字符串
closeOnClickModal 设置是否可以通过单击遮罩关闭当前的提示框 布尔值
closeOnPressEscape 设置是否可以通过按ESC键来关闭当前提示框 布尔值
showInput 设置是否展示输入框 布尔值
inputPlaceholder 设置输入框的占位文案 字符串
inputValue 设置输入框的初始文案 字符串
inputValidator 设置输入框的校验方法 函数
inputErrorMessage 设置校验不通过时展示的文案 字符串
center 设置布局是否居中 布尔值
roundButton 设置是否使用圆角按钮 布尔值

5.3、通知组件

通知用来全局地进行系统提示,可以像消息提醒一样出现一定时间后自动关闭,也可以像提示栏那样常驻,只有用户手动才能关闭。在Vue组件中,可以直接调用方法EINotification来触发通知,常用的参数定义列举如表所示。

参数名 意义
title 设置通知的标题 字符串
message 设置通知的内容 字符串
type 设置通知的样式 success warning info error
duration 设置通知的显示时间 数值,若设置为0,则不会自动消失
position 设置通知的弹出位置 top-right top-left bottom-right bottom-left
showClose 设置是否展示关闭按钮 布尔值
onClose 通知关闭时回调的函数 函数
offset 设置通知距离页面边缘的偏移量 数值

示例代码如下:

html 复制代码
<script setup>
  import { ElNotification } from 'element-plus'
  function notify() {
    ElNotification({
      title: '通知标题',
      message: '通知内容',
      type: 'success',
      duration: 3000,
      position: 'top-right'
    })
  }
</script>

<template>
  <div style="margin: 20px;">
     <el-button @click="notify">弹出通知</el-button>
  </div>
</template>

6、数据承载相关组件

6.1、表格组件

表格组件能够承载大量的数据信息。因此,在实际开发中,需要展示大量数据的页面都会使用到表格组件。在Element Plus中,使用el-table与el-table-column组件来构建表格。首先,编写如下示例代码:

html 复制代码
<template>
  <div style="margin: 20px;">
     <el-table :data="tableData">
       <el-table-column prop="name" label="姓名"></el-table-column>
       <el-table-column prop="age" label="年龄"></el-table-column>
       <el-table-column prop="subject" label="科目"></el-table-column>
     </el-table>
  </div>
</template>

tableData数据结构如下:

js 复制代码
<script setup>
  import {ref} from 'vue';
  const tableData = [
    {name: '小王', age: 29, subject: 'Java'},
    {name: '小李', age: 30, subject: 'C++'},
    {name: '小张', age: 28, subject: 'JavaScript'}
  ]
</script>

其中,el-table-column用来定义表格中的每一列,其prop属性设置此列要渲染的数据对应表格数据中的键名,label属性设置列头信息,代码运行效果如图所示。

el-table和el-table-column组件提供了非常多的属性供开发者进行定制,列举如下。

el-table组件的常用属性表所示。

属性 意义
data 设置列表的数据源 数组
height 设置表格的高度,如果设置了这个属性,表格头会被固定 数值
max-height 设置表格的最大高度 数值
stripe 设置表格是否有斑马纹,即相邻的行有颜色差异 布尔值
border 设置表格是否有边框 布尔值
size 设置表格的尺寸 small large default
fit 设置列的宽度是否自适应 布尔值
show-header 设置是否显示表头 布尔值
highlight-current-row 设置是否高亮显示当前行 布尔值
row-class-name 用来设置行的class属性,需要设置为回调函数 Function({row,rowIndex)可以指定不同的行使用不同的className,返回字符串
row-style 用来设置行的style属性,需要设置为回调函数 Function(frow,rowIndex)可以指定不同的行使用不同的style,返回样式对象
cell-class-name 用来设置具体单元格的className Function(frow,column,rowIndex,columnIndex)
cell-style 用来设置具体单元格的style属性 Function(frow,column,rowIndex,columnIndex)
header-row-class-name 设置表头行的className Function(row,rowIndex)
header-row-style 设置表头行的style属性 Function(row,rowIndex)
header-cell-class-name 设置表头单元格的className Function(frow.column.rowIndex.columnIndex)
header-cell-style 设置表头单元格的style属性 Function(frow.column.rowIndex,columnIndex;)
row-key 用来设置行的key值 Function(row)
empty-text 设置空数据时展示的占位内容 字符串
default-expand-all 设置是否默认展开所有行 布尔值
expand-row-keys 设置要默认展开的行 数组
default-sort 设置排序方式 ascending:升序 descending:降序
show-summary 是否在表格尾部显示合计行 布尔值
sum-text 设置合计行第一列的文本 字符串
summary-method 用来定义合计方法 Function({columns,data})
span-method 用来定义合并行或列的方法 Function(row,column,rowIndex, columnIndex)
lazy 是否对子节点进行懒加载 布尔值
load 数据懒加载方法 函数
tree-props 渲染嵌套数据的配置选项 对象
select 选中某行数据时回调的函数 函数
select-all 全选后回调的函数 函数
selection-change 选择项发生变化时回调的函数 函数
cell-mouse-enter 鼠标覆盖到单元格时回调的函数 函数
cell-mouse-leave 鼠标离开单元格时回调的函数 函数
cell-click 当某个单元格被单击时回调的函数 函数
cell-dblclick 当某个单元格被双击时回调的函数 函数
row-click 当某一行被单击时回调的函数 函数
row-contextmenu 当某一行被右击时回调的函数 函数
row-dblclick 当某一行被双击时回调的函数 函数
header-click 表头被单击时回调的函数 函数
header-contextmenu 表头被右击时回调的函数 函数
sort-change 排序发生变化时回调的函数 函数
filter-change 筛选条件发生变化时回调的函数 函数
current-change 表格当前行发生变化时回调的函数 函数
header-dragend 拖动表头改变列宽度时回调的函数 函数
expand-change 当某一行展开会关闭时回调的函数 函数

通过表中的属性列表可以看到,el-table组件非常强大,除能够渲染常规的表格外,还支持行列合并、合计、行展开、多选、排序和筛选等,这些功能很多需要结合el-table-column来使用。

el-table-column组件的常用属性列举如表所示。

属性 意义
type 设置当前列的类型,默认无类型,则为常规的数据列 selection:多选类型 index:标号类型 expand:展开类型
index 自定义索引 Function(index)
column-key 设置列的key值,用来进行筛选 字符串
label 设置显示的标题 字符串
prop 设置此列对应的数据字段 字符串
width 设置列的宽度 字符串
min-width 设置列的最小宽度 字符串
fixed 设置此列是否固定,默认不固定 left:固定左侧 right:固定右侧
render-header 使用函数来渲染列的标题部分 Function({column,Sindex }
sortable 设置对应列是否可排序 布尔值
sort-method 自定义数据排序的方法 函数
sort-by 设置以哪个字段进行排序 字符串
resizable 设置是否可以通过拖动来改变此列的宽度 布尔值
filter-method 自定义过滤数据的方法 函数

6.2、导航菜单组件

导航组件为页面提供导航功能的菜单,导航组件一般出现在页面的顶部或侧面,单击导航组件上不同的栏目页面会对应跳转到指定的页面。在Element Plus中,使用el-menu、el-sub-menu与el-menu-item来定义导航组件。

下面的示例代码将演示顶部导航的基本使用方法。

html 复制代码
<template>
  <div style="margin: 20px;">
    <el-menu mode="horizontal">
      <el-menu-item index="1">首页</el-menu-item>
      <el-sub-menu index="2">
        <template #title>广场</template>
        <el-menu-item index="2-1">音乐</el-menu-item>
        <el-menu-item index="2-2">视频</el-menu-item>
        <el-menu-item index="2-3">游戏</el-menu-item>
        <el-sub-menu index="2-4">
          <template #title>体育</template>
          <el-menu-item index="2-4-1">篮球</el-menu-item>
          <el-menu-item index="2-4-2">足球</el-menu-item>
          <el-menu-item index="2-4-3">排球</el-menu-item>
        </el-sub-menu>
      </el-sub-menu>
      <el-menu-item index="3" :disabled="true">个人中心</el-menu-item>
      <el-menu-item index="4">设置</el-menu-item>
    </el-menu>
  </div>
</template>

如以上代码所示,el-sub-menu的title插槽用来定义子菜单的标题,其内部可以继续嵌套子菜单组件,el-menu组件的mode属性可以设置导航的布局方式为水平或竖直。运行上述代码,效果如图所示。

el-menu组件非常简洁,提供的可配置属性不多,列举如表所示。

属性 意义
mode 设置菜单模式 vertical:竖直 horizontal:.水平
collapse 是否水平折叠收起菜单,只在vertical模式下有效 布尔值
background-color 设置菜单的背景色 字符串
text-color 设置菜单的文字颜色 字符串
active-text-color 设置当前菜单激活时的文字颜色 字符串
default-active 设置默认激活的菜单 字符串
default-openeds 设置默认展开的子菜单,需要设置为子菜单index的列表 数组
unique-opened 是否只保持一个子菜单展开 布尔值
menu-trigger 设置子菜单展开的触发方式,只在horizontal模式下有效 hover:鼠标覆盖展开 click:鼠标单击展开
router 是否使用路由模式 布尔值
collapse-transition 是否开启折叠动画 布尔值
select 选中某个菜单项时回调的函数 函数
open 子菜单展开时回调的函数 函数
close 子菜单收起时回调的函数 函数

el-sub-menu组件的常用属性列举如表所示。

属性 意义
index 唯一标识 字符串
show-timeout 设置展开子菜单的延时 数值,单位为毫秒
hide-timeout 设置收起子菜单的延时数值,单位为毫秒
disabled 设置是否禁用 布尔值

导航组件最重要的作用是进行页面管理,通常我们会结合路由组件进行使用,通过导航与路由,页面的跳转管理会非常简单方便。

6.3、标签页组件

标签组件用来将页面分割成几个部分,单击不同的标签可以对页面内容进行切换。使用el-tabs创建标签页组件的示例代码如下:

html 复制代码
<template>
  <div style="margin: 20px;">
     <el-tabs type="border-card">
       <el-tab-pane label="页面1" name="1">页面1</el-tab-pane>
       <el-tab-pane label="页面2" name="2">页面2</el-tab-pane>
       <el-tab-pane label="页面3" name="3">页面3</el-tab-pane>
       <el-tab-pane label="页面4" name="4">页面4</el-tab-pane>
     </el-tabs>
  </div>
</template>

代码运行效果如图所示,单击不同的标签将会切换不同的内容。

el-tabs组件的常用属性列表如表所示。

属性 意义
closable 设置标签是否可关闭 布尔值
addable 标签是否可增加 布尔值
editable 标签是否可编辑(增加和删除) 布尔值
tab-position 标签栏所在的位置 top right bottom left
stretch 设置标签是否自动撑开 布尔值
before-leave 当标签即将切换时回调的函数 函数
tab-click 当某个标签被选中时回调的函数 函数
tab-remove 当某个标签被移除时回调的函数 函数
tab-add 单击新增标签按钮时回调的函数 函数
edit 单击Tab的新增或移除按钮时回调的函数 函数

el-tab-pane用来定义具体的每个标签卡,常用属性列举如表所示。

属性 意义
label 设置标签卡的标题 字符串
disabled 设置当前标签卡是否禁用 布尔值
name 与标签卡绑定的value数据 字符串
closable 设置此标签卡 布尔值
lazy 设置标签是否延迟渲染 布尔值

对于el-tab-pane组件,可以通过其内部的label插槽来自定义标题内容。

6.4、抽屉组件

抽屉组件是一种全局的弹窗组件,在流行的网页应用中非常常见。当用户打开抽屉组件时,会从页面的边缘滑出一个内容面板,我们可以灵活地定制内容面板的内容来实现产品的需求。示例代码如下:

html 复制代码
<script setup>
  import {ref} from 'vue';
  const drawer = ref(false);
</script>

<template>
  <div style="margin: 20px;">
    <div style="margin:300px">
      <el-button @click="drawer = true" type="primary">
        点我打开抽屉
      </el-button>
    </div>
    <el-drawer
      title="抽屉面板的标题"
      v-model="drawer"
      direction="ltr">
      抽屉面板的内容
    </el-drawer>
  </div>
</template>

注意,不要忘记在组件的data选项中定义drawer属性控制抽屉的开关。在上述代码中,我们使用按钮控制抽屉的打开,el-drawer组件的direction属性可以设置抽屉的打开方向。运行代码,效果如图所示。

6.5、布局容器组件

布局容器用来方便、快速地搭建页面的基本结构。通过观察当前流行的网站页面,可以发现,它们从布局结构上都是十分相似的。一般都是由头部模块、尾部模块、侧栏模块和主内容模块构成。

在Element Plus中,使用el-container创建布局容器,其内部的子元素一般包括el-header、el-aside、el-main或el-footer。其中:

  • el-header定义头部模块
  • el-aside定义侧边栏模块
  • el-main定义主内容模块
  • el-footer定义尾部模块

el-container组件可配置的属性只有一个,如表所示。

属性 意义
direction 设置子元素的排列方式 horizontal:水平 vertical:竖直

el-header组件和el-footer组件默认会水平撑满页面,可以设置其渲染高度,如表所示。

属性 意义
height 设置高度 字符串

el-aside组件的默认高度会撑满页面,可以设置其宽度,如表所示。

属性 意义
width 设置宽度 字符串

示例代码如下:

html 复制代码
<template>
  <el-container>
    <el-header height="80px" style="background-color: gray;">Header</el-header>
    <el-container>
      <el-aside width="200px" style="background-color: red;">Aside</el-aside>
      <el-container>
        <el-main>
          <div style="height: 300px; background-color: #f1f1f1;">内容</div>
        </el-main>
        <el-footer height="80px" style="background-color: gray;">Footer</el-footer>
      </el-container>
    </el-container>
  </el-container>
</template>

7、综合示例

页面设计如下:页面由三部分组成。首先是顶部的标题栏,用于展示当前页面的名称。其次是左侧的侧边栏,用于选择年级和班级。中间的内容区域进一步分为两个部分,上半部分是标题区,显示一些控制按钮,例如"新增学生信息"和"搜索学生信息"​;下半部分则展示当前班级的完整学生列表,包括学生的姓名、年龄、性别以及信息添加的日期。页面布局的草图如图所示。

html 复制代码
<script setup>
  import {ref} from 'vue'
  const desc = ref('七年级1班学生统计')
  const stus = ref([
    {name: '小王', age: 14, sex: '男', date: '2020年8月15日'},
    {name: '小张', age: 15, sex: '男', date: '2020年5月15日'},
    {name: '小秋', age: 15, sex: '女', date: '2020年8月15日'},
  ])
  function selectFunc(index) {
    let strs = ['七', '八', '九']
    let rank = strs[Math.floor((index - 1) / 3)]
    desc.value = `${rank}年级${((index - 1) % 3) + 1}班学生统计`
  }
</script>
<style lang="css" scoped>
  .header{
    font-style: 30px;
    line-height: 80px;
    background-color: f1f1f1;
  }
  .aside{
    background-color: wheat;
    height: 600px;
  }
  .subHeader{
    background-color: cornflowerblue;
  }
  .desc{
    font-style: 25px;
    line-height: 80px;
    color: white;
    width: 800px;
  }
  .content{
    height: 410px;
  }
  .footer{
    height: 410px;
  }
  .footer{
    background-color: dimgray;
    color: white;
    font-style: 17px;
    line-height: 30px;
  }
</style>
<template>
  <el-container>
    <el-header height="80px" style="padding: 0">
      <div class="header">教务系统学生管理</div>
    </el-header>
    <el-container>
      <el-aside width="200px">
        <el-menu class="aside" @select="selectFunc" default-avtive="1" :unique-opened="true">
          <el-sub-menu index="1">
            <template #title>
              <span>七年级</span>
            </template>
            <el-menu-item index="1">1班</el-menu-item>
            <el-menu-item index="2">2班</el-menu-item>
            <el-menu-item index="3">3班</el-menu-item>
          </el-sub-menu>
          <el-sub-menu index="2">
            <template #title>
              <span>八年级</span>
            </template>
            <el-menu-item index="4">1班</el-menu-item>
            <el-menu-item index="5">2班</el-menu-item>
            <el-menu-item index="6">3班</el-menu-item>
          </el-sub-menu>
          <el-sub-menu index="3">
            <template #title>
              <span>九年级</span>
            </template>
            <el-menu-item index="7">1班</el-menu-item>
            <el-menu-item index="8">2班</el-menu-item>
            <el-menu-item index="9">3班</el-menu-item>
          </el-sub-menu>
        </el-menu>
      </el-aside>
      <el-container>
        <el-header height="80px" style="padding:0;margin:0">
          <el-container class="subHeader">
            <div class="desc">{{ desc }}</div>
            <el-button style="width: 100px; height:30px; margin:20px;">新增记录</el-button>
          </el-container>
        </el-header>
        <el-main style="margin: 0; padding: 0">
          <div class="content">
            <el-table :data="stus">
              <el-table-column prop="name" label="姓名"></el-table-column>
              <el-table-column prop="age" label="年龄"></el-table-column>
              <el-table-column prop="sex" label="性别"></el-table-column>
              <el-table-column prop="date" label="录入日期"></el-table-column>
            </el-table>
          </div>
        </el-main>
        <el-footer height="30px" class="footer">Vue框架搭建,Element Plus提供组件支持</el-footer>
      </el-container>
    </el-container>
  </el-container>
</template>
相关推荐
qq_452396232 小时前
第十三篇:《UI自动化测试框架设计:整合TestNG/JUnit + Allure报告》
ui·junit
zhensherlock2 小时前
Protocol Launcher 系列:Beorg 高效任务管理的协议支持
前端·javascript·typescript·node.js·自动化·github·js
ppandss12 小时前
JavaWeb从0到1-DAY3.1- Vue(ii)
前端·javascript·vue.js
M ? A2 小时前
Vue 转 React | VuReact编译工具快速入门
前端·javascript·vue.js·后端·react.js·面试·vureact
qq_427539832 小时前
iframe 嵌入预览 PDF ,禁用右键菜单、打印下载按钮不展示
前端·javascript·vue.js·pdf
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_3:(表单CSS美化实战与盒子模型三大核心属性详解)
前端·javascript·css·html
非科班Java出身GISer2 小时前
ArcGIS Maps SDK for JavaScript 5.0 组件化开发指南
javascript·arcgis·components·arcgis js 组件化·arcgis js5.0·arcgis js5.0初始化
邪修king3 小时前
UE5 零基础入门第四弹:UMG UI 系统入门,从静态界面到逻辑联动
c++·ui·ue5