UI 框架:element-ui(二)

简介: 在当今快速发展的前端开发领域,用户界面的设计和交互体验日益成为软件成功的关键因素之一。Element UI,作为一款基于Vue.js的组件库,以其精美的界面和丰富的功能受到了广泛的关注与应用。它为开发者提供了一整套高质量的组件,帮助他们快速构建具有现代感的应用程序。Element UI不仅注重美观的设计,还提供了良好的文档支持和社区活跃度,使得开发者能够轻松上手并解决实施过程中的各种问题。在这篇文章中,我们将深入探讨Element UI的基本特点、安装步骤,以及如何利用其强大的组件系统高效地构建用户友好的界面。无论您是初学者还是有经验的开发者,这篇文章都将为您开辟一条通向更高效开发的道路。

引言

在当今快速发展的前端开发领域,用户界面的设计和交互体验日益成为软件成功的关键因素之一。Element UI,作为一款基于Vue.js的组件库,以其精美的界面和丰富的功能受到了广泛的关注与应用。它为开发者提供了一整套高质量的组件,帮助他们快速构建具有现代感的应用程序。

Element UI不仅注重美观的设计,还提供了良好的文档支持和社区活跃度,使得开发者能够轻松上手并解决实施过程中的各种问题。在这篇文章中,我们将深入探讨Element UI的基本特点、安装步骤,以及如何利用其强大的组件系统高效地构建用户友好的界面。无论您是初学者还是有经验的开发者,这篇文章都将为您开辟一条通向更高效开发的道路。

安装

安装

在cmd中也可以

yarn add element-ui
npm i element-ul --save

引用

<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>

卸载

npm unstall element-ui

如果您使用 Volar,请在 jsconfig.json 中通过 compilerOptions.type 指定全局组件类型。

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["element-plus/global"]
  }
}

第一个简单使用

第一个简单的使用

```HTML
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>

<body>
    <div id="app">
        <el-button @click="visible = true">按钮</el-button>
        <el-dialog :visible.sync="visible" title="Hello world">
            <p>欢迎使用 Element</p>
        </el-dialog>
    </div>
</body>
<!-- 先引入 Vue -->
<script src="./vue.js"></script>
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    new Vue({
        el: '#app',
        data: function () {
            return { visible: false }
        }
    })
</script>

</html>
```

引入和使用

yarn add element-ui

下载完成以后,在main.js 里面注册使用

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.config.productionTip = false
// Vue.use() .... 全局使用 
Vue.use(ElementUI)
new Vue({
  render: h => h(App),
}).$mount('#app')
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.config.productionTip = false
Vue.use(ElementUI);
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

app.vue

<template>
  <div>
    <!-- 因为template里面只能有一个根元素,官方这里拷过来以后在外面加了一层div标签包起来 -->
    <el-radio v-model="radio" label="1">备选项</el-radio>
    <el-radio v-model="radio" label="2">备选项</el-radio>
  </div>
</template>
<script>
export default {
  data() {
    return {
      radio: "1"
    };
  }
};
</script>

提示信息


this.$message({
                message: "delete successfully",
                type: "success"
            })
this.$message.warning("hello,world!");

折叠菜单

<template>
    <!--  设置高度为 100% -->
    <el-container style="height: 100%;">
        <el-aside 
         动态 显示 宽度
        :width="sideWidth + 'px'"
        background
        style="background-color: rgb(249, 250, 252)">
            <el-menu 
            :default-openeds="['1']" 
            高度设置为100%
            style="height: 100%;
            横坐标 超出  hidden
            overflow-x: hidden;"
            text-color="#fff"
            background-color="rgb(35, 38, 44)" 
            正在活动  的 导航 颜色
            active-text-color="#ffd04b"
             动画关闭
                :collapse-transition="false"
               menu 的 绑定 显示和不 显示 
                :collapse="isCollapse">
                <!--  在 el-menu 下面 -->
                创建一个 头部的  导航
                <div style="height: 60px; line-height: 60px; text-align: center;">
                    <img src="@/assets/logo.png" style="width: 20px; position: relative; top:5px;margin-right:8px">
                    文字绑定  显示和 不显示
                    <b style="color:white" v-show="logoTextShow">后台管理系统</b>
                </div>
<script>
export default {
    data() {
        const item = {
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
        };
        return {
            //   填满
            tableData: Array(10).fill(item),
            //  收缩按钮的名称
            collapseBtnClass: 'el-icon-s-fold',
            //   open and close 
            isCollapse: false,
            sideWidth: 200,
            logoTextShow: true,
        }
    },
    methods: {
        switchMenu() {
            //  点击 取反
            this.isCollapse = !this.isCollapse
            //  如果 为真  则 点击 之后
            if (this.isCollapse) {
                //  宽度设置为 64 
                this.sideWidth = 64;
                //   点击 图标 的 改变
                this.collapseBtnClass = 'el-icon-s-unfold'
                //  文字显示 与 不显示 
                this.logoTextShow = false
            } else {
                this.sideWidth = 200;
                this.collapseBtnClass = 'el-icon-s-fold'
                this.logoTextShow = true
            }
        }
    }
};
</script>


表单验证

添加 prop
      <el-form :model="form" :rules="rules" ref="form">
        <el-form-item label="姓名" :label-width="formLabelWidth" prop="stuName">
          <el-input v-model="form.stuName" autocomplete="off"></el-input>
        </el-form-item>

rules

rules: {
        stuName: [
          { required: true, message: "请输入姓名", trigger: "blur" },
        ],

方法

add() {
      this.$refs.form.validate(valid => {
        if (valid) {
          addStu(this.form).then((res) => {
            if (res) {
              this.$message.success("添加成功")
            } else {
              this.$message.error("添加失败")
            }
          })
        }
      })
    },

自己写 验证方法

绑定


1 为男,0 为女

<el-table-column label="Sex" prop="stuSex" :formatter="(row) => row.stuSex == 1 ? '男' : '女'">
      </el-table-column>


引入使用

```Plain Text
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.config.productionTip = false
Vue.use(ElementUI);
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')


```

绑定一些属性

<el-dialog v-model="dialogFormVisible" :title="state ? '添加学生信息': '修改学生信息'" width="600px" ref="qwe">


很多属性

// span 可以改变 属性多少
<el-row>
  <el-col :span="24"><div class="grid-content bg-purple-dark"></div></el-col>
</el-row>

输入框

clearable>   可清楚
 show-password  密码框
  suffix-icon="el-icon-date"  和 prefix-icon

标签

closable
<el-tag
  v-for="tag in tags"
  :key="tag.name"
  closable
  :type="tag.type">
  {{tag.name}}
</el-tag>

一些操作

过滤实现

const getData = (params) => {
    students(params).then(res => {
        if (res.data.status === 200) {
            total = res.data.total
            tableData.value = res.data.data
            tableData.value.forEach(item => {
                //   一般不修改 原数据,  用 另一个变量 来 代替
                //  i =1 ? true  (则为这个) : (否则为这个)
                //  i =1 ? true  (则为这个) : 否则   i==2   ? true : false
                //  
                item.sex === 1 ? item.sex_text = '女' : item.sex_text = '男';
                item.state === "1" ? item.state_text = '已入学'
                    : item.state === "2" ? item.state_text = '未入学'
                        : item.state_text = '休学中'
            })
        }
    })
}


el-table的使用

加在 el-table 属性里面
@row-click=handleRow
点击每行 可以控制输出每行 的 数据

stripe  加 上之后会有 条纹 
border  加上 有表格


排序
:default-sort = "{prop: 'date', order: 'descending'}"   desc  asc

:format

image.png

image.png

el-table-cloumn

可在里面加图标
      <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>
      
  鼠标移入得到更多的信息
        <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>

formatter

在 需要 绑定的数据 上 绑定  :formatter=test(row)
test(row){
conso.log(row)
if(row.status==0){
return "未处理") ....


懒加载

    <el-image v-for="url in urls" :key="url" :src="url" lazy></el-image>

深度样式

>>>

如果项目style使用的是css 原生样式,那么你可以直接使用 >>> 穿透修改

::v-deep在预处理器 scss 、sass、less 比较通用


<style scoped>
/*编译前*/
.a{
 ::v-deep .b { 
  color:blue
 }
} 
.a ::v-deep .b {
 color:blue
}
 
/*编译后*/
.a[data-v-fsdfg9] .b { color:blue}
</style>
.a{
  ::v-deep .b{
    width: 300px;
    border:4px solid red;
  }
}


相关文章
|
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 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析