UI 框架:Element-plus组件库(一)

简介: 在现代Web开发中,用户界面的设计与交互体验至关重要。随着前端技术的迅速发展,各种UI框架层出不穷,旨在提升开发效率和用户体验。其中,Element Plus作为一款基于Vue 3的组件库,因其简洁优雅的设计和丰富的功能而备受欢迎。Element Plus不仅提供了众多高质量的组件,还注重与开发者的友好互动,使得即使是初学者也能快速上手。在本系列文章中,我们将深入探讨Element Plus的各个组件及其应用,通过实例演示如何有效利用该框架构建美观且功能强大的用户界面。

引言


在现代Web开发中,用户界面的设计与交互体验至关重要。随着前端技术的迅速发展,各种UI框架层出不穷,旨在提升开发效率和用户体验。其中,Element Plus作为一款基于Vue 3的组件库,因其简洁优雅的设计和丰富的功能而备受欢迎。

Element Plus不仅提供了众多高质量的组件,还注重与开发者的友好互动,使得即使是初学者也能快速上手。在本系列文章中,我们将深入探讨Element Plus的各个组件及其应用,通过实例演示如何有效利用该框架构建美观且功能强大的用户界面。


使用

Plain Text
$ pnpm install element-plus --save
$ yarn add element-plus
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')
图标
Plain Text
$ npm install @element-plus/icons-vue
# Yarn
$ yarn add @element-plus/icons-vue
```Plain Text 使用 import * as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App) for (const [key, component] of Object.entries(ElementPlusIconsVue)) {   app.component(key, component) }
```

输入框的使用

:prefix-icon

<el-input v-model="form.password" :type="passwordType" :prefix-icon="Search"></el-input>

:suffix-icon="Search"

显示   密码

:show-password="true"

:show-password="show"
<template>
    <div class="login_page">
        <div class="login_info">
            <el-form label-width="auto" :model="formLabelAlign" style="max-width: 800px">
                <el-form-item>
                    <el-input v-model="formLabelAlign.account" placeholder="请输入账号" type="text" />
                </el-form-item>
                <el-form-item>
                    <el-input v-model="formLabelAlign.password" placeholder="请输入密码" :type="password_type">
                        <template v-slot:suffix>
                            <el-icon :size="20" @click="show_password">
                                <component :is="show?icon_list.icon_view:icon_list.icon_hide" />
                            </el-icon>
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item class="login_btn">
                    <el-button type="primary">登录</el-button>
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>
<script setup>
    import {
        reactive,
        ref
    } from 'vue'
    const password_type = ref("password")
    const formLabelAlign = reactive({
        account: '',
        password: '',
    })
    let show = ref(false)
    const show_password = () => {
        if (show.value) {
            password_type.value = "text"
        } else {
            password_type.value = "password"
        }
        show.value = !show.value
    }
    const icon_list = {
        icon_hide: "hide",
        icon_view: "view"
    }
</script>
<style scoped lang="scss">
    .login_page {
        display: flex;
        justify-content: center;
        /* 水平居中 */
        align-items: center;
        /* 垂直居中 */
        background: linear-gradient(to bottom right, #0081f1 30%, #f7182e 60%);
        width: 100%;
        /* 设置宽度为100% */
        height: 99vh;
        /* 设置高度为视口高度 */
    }
    .login_info {
        width: 400px;
        padding: 20px;
        border: 0.7px solid linear-gradient(to bottom right, #0081f1 30%, #f7182e 60%);
        border-radius: 5px;
        box-shadow: 1px 1px 3px;
    }
    .login_btn button {
        margin: 0 auto;
        width: 100%;
    }
</style>
<template>
    <div class="login_page">
        <div class="login_info">
            <el-form label-width="auto" :model="formLabelAlign" style="max-width: 800px">
                <el-form-item>
                    <el-input v-model="formLabelAlign.account" placeholder="请输入账号" type="text" />
                </el-form-item>
                <el-form-item>
                    <el-input v-model="formLabelAlign.password" show-password="true" placeholder="请输入密码"
                        type="password">
                    </el-input>
                </el-form-item>
                <el-form-item class="login_btn">
                    <el-button type="primary">登录</el-button>
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>
<script setup>
    import {
        reactive,
        ref
    } from 'vue'
    const password_type = ref("password")
    const formLabelAlign = reactive({
        account: '',
        password: '',
    })
</script>
<style scoped lang="scss">
    .login_page {
        display: flex;
        justify-content: center;
        /* 水平居中 */
        align-items: center;
        /* 垂直居中 */
        background: linear-gradient(to bottom right, #0081f1 30%, #f7182e 60%);
        width: 100%;
        /* 设置宽度为100% */
        height: 99vh;
        /* 设置高度为视口高度 */
    }
    .login_info {
        width: 400px;
        padding: 20px;
        border: 0.7px solid linear-gradient(to bottom right, #0081f1 30%, #f7182e 60%);
        border-radius: 5px;
        box-shadow: 1px 1px 3px;
    }
    .login_btn button {
        margin: 0 auto;
        width: 100%;
    }
</style>


验证的清空

formEl.resetFields()  的使用

<el-form :model="form" :rules="rules" ref="formRef">
        用 ref  绑定 formRef
        const formRef = ref(null);

addStudent 中 定义 了 一个 方法

使用 如下

const addStudent = (test) => {
      resetForm(test.formRef)
}

清空  代码

const resetForm = (formEl) => {
    if (!formEl) return
    formEl.resetFields()
}

调用  传参 为

@click="addStudent($refs)

简单使用

<el-button @click="resetForm(formRef)">重置</el-button>
const resetForm = (formEl) => {
    if (!formEl) return
    formEl.resetFields()
}

轮播图

<template>
    <div class="home-banner">
        <el-carousel height="500px">
            <el-carousel-item v-for="item in 4" :key="item.id">
                <img src="../assets/images/logo.png" alt="">
            </el-carousel-item>
        </el-carousel>
    </div>
</template>
<script  setup>
</script>
<style scoped></style>


面包屑

<template>
    <div class="bread-container">
        <el-breadcrumb separator=">">
            <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item v-for="(i, index) in item">{{ i.name }}</el-breadcrumb-item>
        </el-breadcrumb>
    </div>
</template>
<script  setup>
let item = [
    {
        id: 1,
        name: 'home',
    },
    {
        id: 2,
        name: 'category',
    },
    {
        id: 3,
        name: 'settings',
    }];
</script>
<style scoped></style>

导航激活

在RouterLink里面配置 组件默认激活类名

设置 active-class 属性 设置对应的 类名 即可
<RouterLink active-class="active" :to="/test">
  {{item.name}}
  <RouterLink>
    .active{
      color:red,
        border-bottom:1px solid red}


骨架屏幕

skeleton

可以  的 样式 有

image.png


简单使用

<template>
  <el-skeleton style="width: 240px">
    <template #template>
      <el-skeleton-item variant="image" style="width: 240px; height: 240px" />
      <el-skeleton-item variant="text" style="width: 30%" />
    </template>
  </el-skeleton>
  <el-skeleton style="--el-skeleton-circle-size: 100px">
    <template #template>
      <el-skeleton-item variant="circle" />
    </template>
  </el-skeleton>
</template>
<script setup lang="ts">
</script>



简单的菜单

<template>
      <el-menu
          active-text-color="#ffd04b"
          background-color="#545c64"
          class="el-menu-vertical-demo"
          default-active="2"
          text-color="#fff"
      >
        <el-sub-menu index="1">
          <template #title>
            <el-icon><location /></el-icon>
            <span>Navigator One</span>
          </template>
          <el-menu-item-group title="Group One">
            <el-menu-item index="1-1">item one</el-menu-item>
            <el-menu-item index="1-2">item two</el-menu-item>
          </el-menu-item-group>
       </el-sub-menu>
      </el-menu>
</template>
<script lang="ts" setup>
import {
  Location,
} from '@element-plus/icons-vue'
</script>


table里面的tree

<template>
  <div>
    <el-table
        :data="tableData"
        style="width: 100%; margin-bottom: 20px"
        row-key="id"
        border
    >
      <el-table-column prop="date" label="Date" sortable />
      <el-table-column prop="name" label="Name" sortable />
      <el-table-column prop="address" label="Address" sortable />
    </el-table>
  </div>
</template>
<script lang="ts" setup>
interface User {
  id: number
  date: string
  name: string
  address: string
  hasChildren?: boolean
  children?: User[]
}
const tableData: User[] = [
  {
    id: 1,
    date: '2016-05-02',
    name: 'wangxiaohu',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 2,
    date: '2016-05-04',
    name: 'wangxiaohu',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 3,
    date: '2016-05-01',
    name: 'wangxiaohu',
    address: 'No. 189, Grove St, Los Angeles',
    children: [
      {
        id: 31,
        date: '2016-05-01',
        name: 'wangxiaohu',
        address: 'No. 189, Grove St, Los Angeles',
      },
      {
        id: 32,
        date: '2016-05-01',
        name: 'wangxiaohu',
        address: 'No. 189, Grove St, Los Angeles',
      },
    ],
  },
  {
    id: 4,
    date: '2016-05-03',
    name: 'wangxiaohu',
    address: 'No. 189, Grove St, Los Angeles',
  },
]
</script>


图标

<ElIcon :size="30" color="hotpink">
          <edit />
        </ElIcon>


相关文章
|
2天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1517 4
|
29天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
5天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
492 19
|
2天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
179 1
|
8天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
448 5
|
7天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
314 2
|
23天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
25天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2608 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析