目录

Icon 图标

Button 按钮

Input 输入框

Select 选择器

DatePicker 日期选择器

Table 表格

Pagination 分页

Descriptions 描述列表

Loading 加载

Message 消息提示

MessageBox 弹框

Dialog 对话框

Timeline 时间线

Image 图片

InfiniteScroll 无限滚动

Drawer 抽屉


Element UI _ 疑难杂症 , 想必大家伙遇到了很多修改其组件库样式的难题吧 ,

在这里我也将会记录下来我在日常使用过程中遇见的难题及解决方案分享给大家 ,

当然这些仅是我的一些想法 , 仅供参考 , 大家可借鉴 , 一起探讨 :


解决 element-ui 的坑 :body 外默认有一圈 8px 的边框


Icon 图标

提供了一套常用的图标集合。

如何设置 icon 图标大小 和 颜色

方法一 :

需要给父盒子设置字体大小和颜色

方法二 :

直接给当前组件设置字体大小!


如何设置 icon 图标的提示文本 ?( 类似于 title 效果 )

直接 加 title 属性  title=“提示文本”


Button 按钮

常用的操作按钮。

面试需求 : 如何设置一个纯文本按钮 ( 无边框 , 无背景颜色 , 只显示文本文字的 )

一开始我是说的查阅官方文档 , 看有没有相关能够实现此方案的属性 , 如果没有的话 , 可以给按钮加上一个 类名 , 去操控它的样式 , 比如 : 使用  border: none; background-color: rgba(255, 255, 255, 0)   将按钮外边框去掉 , 背景颜色消失 等等

结果 , 最后才发现 , elementUI 组件库里的按钮有配置项 , 很容易就可修改了

<el-button type="text">文本按钮</el-button>

button 按钮样式修改 :

.el-button--text {margin-left: 40px;border: 1px solid #409EFF;padding: 0 15px
}

Input 输入框

通过鼠标或键盘输入字符

基础用法

如何设置 el-input 的宽度 :

直接修改其对应类名的样式就好 : .el-input { width : 175px }

修改输入框的大小 : size=“ medium/small/mini ”  ( 大 / 中 / 小 )


阻止在 form 表单下单个的 input 输入款的回车默认提交行为

@submit.native.prevent


需求 :输入框限制用户只能输入数字

这个问题我使用过很多办法, 每一种都去尝试,但是结果都不太理想
比如以下的几种方法

注:我要的效果是,输入框内只可输入数字,除了数字其他什么都不可输入,

包括标点符号,英文在内

第一种、使用 el-input 原生自带的  type=“number”

  • 存在的问题
  1. type="number" 允许输入 e
  2. maxlength 属性会不生效
  3. 可以输入1.1.....11...1

第二种、使用 oninput

<el-inputv-model='inputValue'oninput="value=value.replace(/[^\d]/g,'')"maxLength='9'
/>
  • 存在的问题
  1. 测试的时候偶然发现,有时候会出现输入框的值没有绑定到 v-model 上

  2. 暂时不知道原因,也比较难复现,而且输入汉字时数字可能会被删除

  3. 绑定的 @input 事件 , 有时会失效 , 暂时不知原因。

第三种、使用 onkeypress

<el-inputv-model="length" :maxlength="3" placeholder="长 cm" onkeypress='return( /[\d]/.test(String.fromCharCode(event.keyCode)))' />
  • 存在的问题
  1. 这个代码一开始可以输中文 , 只有输数字时才不可以输入其他

第四种、使用 onafterpaste

<el-inputv-model='inputValue'onafterpaste="this.value=this.value.replace(/[\D]/g,'')"maxLength='9'
/>
  • 存在的问题
  1. @input 绑定的 input 输入事件 , 会获取到你输入的最后一个非数字内容

第五种、监听 v-model 绑定值


侧面解决方案 :

利用 form 表单自带的校验功能

ElementUI - Form 表单 - 数字类型验证

缺点 : 不会限制用户输入非数字内容 , 只是会给警告提示 , 达不到预期需求效果

<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm"><el-form-itemlabel="年龄"prop="age":rules="[{ required: true, message: '年龄不能为空'},{ type: 'number', message: '年龄必须为数字值'}]"><el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('numberValidateForm')">提交</el-button><el-button @click="resetForm('numberValidateForm')">重置</el-button></el-form-item>
</el-form>
<script>export default {data() {return {numberValidateForm: {age: ''}};},methods: {submitForm(formName) {this.$refs[formName].validate((valid) => {if (valid) {alert('submit!');} else {console.log('error submit!!');return false;}});},resetForm(formName) {this.$refs[formName].resetFields();}}}
</script>

解决方案 :

试验了两天时间 , 才搞出来了自我感觉良好的效果 :(查阅各种资料 , 综合总结)

" ^[0-9]*[1-9][0-9]*$ " //正整数

上代码 , 自行体会哦

<template><div class="formBox"><!-- 阻止回车提交行为 --><el-form label-position="top" @submit.native.prevent><el-form-item size="mini"><!-- 文本类型输入框 --><el-inputv-if="item.quInputType === '1'"v-model="item.modelValue"type="textarea":style="`width:${item.answerInputWidth}px`":rows="item.answerInputRow"placeholder="请输入文本内容"></el-input><!-- 日期类型输入框 --><el-date-pickerv-if="item.quInputType === '2'":readonly="true"v-model="item.dateValue"type="date"placeholder="请选择日期"></el-date-picker><!-- 数字类型输入框 --><el-inputv-if="item.quInputType === '3'"size="small":maxlength="item.numDigit"v-model.number="item.numValue"@input="handleNumInput($event, item)"placeholder="请输入正整数"></el-input></el-form-item></el-form></div>
</template>
<script>
export default {data() {return {// 在 item 中的数据字段numValue: "", // 数字输入框的绑定值quInputType: "1", // input 类型 : 1.文本 2.日期 3.数字modelValue: "", // 默认文本域绑定值answerInputWidth: "300", // input 宽度answerInputRow: "1", // input 高度dateValue: "", // 日期选择器绑定值numValue: "", // 数字输入框绑定值numDigit: "1", // 控制数字位数};},methods: {handleNumInput(event, item) {if (!/^[0-9]*[1-9][0-9]*$/.test(event)) {// 如果是非数字内容则 replace 切除掉item.numValue = event.replace(/\D/g, "");}},},
};
</script>
<style lang="scss" scoped>
</style>

封装一个数字框

开始封装 :

<!-- 作者 : 小灰狼功能 : 数字框时间 : 2022/04 -->
<template><div><el-inputv-if="inputShow":readonly="readonly":disabled="disabled":size="inputSize":style="inputStyle":maxlength="maxlength":placeholder="placeholder"v-model="modelValue.val"@input="handleNumInput($event, modelValue.val)"></el-input></div>
</template><script>
// 导入数字型输入框封装函数
import { digitalInput } from "../../utils/digitalInput";export default {name: "numInput",props: {inputShow: {// 控制是否显示数字框type: Boolean,required: true,default: false,},readonly: {// 控制数字框是否只读type: Boolean,required: true,default: false,},disabled: {// 控制数字框是否禁用type: Boolean,default: false,},inputSize: {// 控制数字框大小type: String,required: true,default: "small",},inputStyle: {// 控制数字框样式type: Object,required: true,default: {},},maxlength: {// 控制数字框内容长度type: String,required: true,default: "1",},placeholder: {// 数字框提示文本type: String,required: true,default: "正整数",},modelValue: {// 数字框绑定值// type: Object,required: true,default: {},},},methods: {handleNumInput(event, val) {// 限制用户输入非数字内容this.modelValue.val = digitalInput(event, val);// this.$emit("handleNumInput", digitalInput(event, val));},},
};
</script><style lang="scss" scoped>
</style>

digitalInput.js 文件

/** 数字型输入框* @param {} event 事件对象* @param {} modelValue 输入框绑定值* @return {} 处理好的内容*/
// 限制用户只能输入数字
export const digitalInput = (event, modelValue) => {// 限制用户输入非数字内容if (!/^[0-9]*[1-9][0-9]*$/.test(event)) {modelValue = event.replace(/\D/g, "");}console.log(modelValue, "封装函数");return modelValue;
};

开始使用 :

<template><div><!-- 数字框组件 --><num-input:inputShow="quInputType === '3'":readonly="false":inputSize="'small'":inputStyle="{ width: '300px' }":maxlength="numlength":placeholder="'请输入正整数'":modelValue="modelValue"></num-input></div>
</template><script>
// 导入数字框组件
import numInput from "../../../components/common/numInput.vue";export default {name: "container",components: {numInput, // 数字框组件},data() {return {quInputType: "3", // 类型numlength: "1", // 控制数字位数modelValue: {val: "1",},};},methods: {},
};
</script>

Select 选择器

当选项过多时,使用下拉菜单展示并选择内容。

问题 : 使用时下拉的内容样式与原来组件库里看到的效果不太一样了 , 查阅百度 , 说是什么下拉那块内容已经不再是被 #App 包裹了 , 所以

一:如何修改 el-select 下拉框中选项的样式,网上的方法一般有两种:
1.找到下拉框的类名,写一个全局的样式。
2.通过/deep/来修改.el-select-dropdown__item的样式内容
3.通过popper-class设置的类名添加样式

以上几种方式中,第二种和第三种是无法生效的,而第一种形式虽然可以,但是会造成样式污染,在打包上传到服务器的时候,其他地方的样式可能会因此发生改变。

二:问题分析

上图中显示的是当选中 el-select 的选项时页面的结构,选项的容器并不在挂载的 div#app中,而是 div#app 的兄弟元素,我们在组件中设置样式的时候,加上了 scoped,作用域都是局限在 div#app 中,所以设置的样式就无法正常作用到选项内容的 div 上。

注:el-select 组件中,只有选项的容器默认是 div#app 之外的,展示的 div.el-input 还是在div#app 之中。

三:问题解决

Popper-append-to-body 属性是 Element-UI 官方文档中提供的一个属性,该属性的用途就是将 el-select 选项的内容移动 div#app 当中,默认值是 true ,下面一张图是将该属性设置为false 时的 DOM 结构展示。

    <el-select v-model="value" placeholder="请选择" :popper-append-to-body="false"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select>

四:样式修改

  // 修改单个的选项的样式/deep/ .el-select-dropdown__item{background-color: transparent;color: #fff;text-aligin: left;padding-left: 10px}// item 选项的 hover 样式/deep/ .el-select-dropdown__item.hover, /deep/ .el-select-dropdown__item:hover{color:#409eff;}

element 饿了么下拉框 el-select 选值后,框里不变的问题 ( 有值却无法选中 )

遇到一个 bug,下拉框怎么点都改变不了

饿了么组件中的下拉框 值 不好使 (点不了)
由于值是循环出来的 层数太多可能 所以不好使 点不了

<el-form-item label="坑位:"><el-select v-model="form.pitSeq" placeholder="请选择"><el-option v-for="(v, i) in $store.state.fixed.pitSeq" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
</el-form-item>

但是我把 form.pitSeq 打印出来其实值已经变了

最后用了 vue 的刷新组件的方法解决了 : $forceUpdate() ,在 el-select 改变的方法执行刷新,代码如下

<el-form-item label="坑位:"><el-select v-model="form.pitSeq" placeholder="请选择" @change="$forceUpdate()"><el-option v-for="(v, i) in $store.state.fixed.pitSeq" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
</el-form-item>


DatePicker 日期选择器

用于选择或输入日期

DatePicker日期选择器 怎么设置默认值 ?

在这里给 data 下面 组件 v-model 绑定的数据一个初始化的值。

XX: new Date(“2022-04-11”);
就不需要再写函数了。

<template><div><!-- 日期类型 --><el-date-pickerv-if="item.type === '2'"type="date"placeholder="选择日期"v-model="datePicker"@change="dateAnswer"></el-date-picker></div>
</template><script>
export default {data() {return {datePicker: "", // 日期选择器绑定值};},created() {this.datePicker = new Date("2022-04-11"); // 日期选择器默认值this.datePicker = new Date(this.data.dateValue); // 日期选择器默认值},
};
</script>


Table 表格

用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。

多选

选择多行数据时使用 Checkbox。

需求 : 左上角的全选按钮我不需要 , 我只需要它下面的单选按钮即可 :

实现 :

原代码 :

<el-tableref="multipleTable":data="tableData"tooltip-effect="dark"style="width: 100%"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55"></el-table-column><el-table-columnlabel="日期"width="120"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column><el-table-columnprop="name"label="姓名"width="120"></el-table-column><el-table-columnprop="address"label="地址"show-overflow-tooltip></el-table-column></el-table><div style="margin-top: 20px"><el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button><el-button @click="toggleSelection()">取消选择</el-button></div>

原效果 :

更新后代码 :

<div><el-tableref="multipleTable":data="tableData"tooltip-effect="dark"style="width: 100%"@selection-change="handleSelectionChange"><el-table-column width="50"><template slot="header"><div></div></template><template slot-scope="scope"><input type="checkbox" :value="scope.row.date" /></template></el-table-column><!-- <el-table-column type="selection" width="55"> </el-table-column> --><el-table-column label="日期" width="120"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column><el-table-column prop="name" label="姓名" width="120"> </el-table-column><el-table-column prop="address" label="地址" show-overflow-tooltip></el-table-column></el-table><div style="margin-top: 20px"><el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button><el-button @click="toggleSelection()">取消选择</el-button></div></div>

更新后效果 :

以上是稳守法 : 经过几次测试 , 发现以下简单处理也可实现 :

处理完毕 , 已经可以实现我们当初想要的效果了 ,

之所以这么麻烦的去处理 , 是因为一开始我们找了官方文档 , 并没有对此方面的修改配置项 , 随后我们又想通过拿到标签 class 类名去控制修改它的样式 , 结果发现我们在浏览器内可以直接给其设置为 display : none ; 时将其隐藏 , 结果在修改了代码之后却怎么也不行了 , 没有效果改变 ,  随后即使我们增加权重值 ( ! important ) , 或者给其 样式穿透 ( ::v-deep ) 也都没有实现我们想要的效果 , 最后折腾了半天 , 才有了以上的这种解决方案 , 因为属实难搞 , 特就将此次解决办法记录下来 , 方便日后自己再遇到此类似问题 , 还能有个印象 , 也希望对大家伙能有点帮助吧 .


自定义列模板

自定义列的显示内容,可组合其他组件使用。

原代码 :

<template><el-table:data="tableData"style="width: 100%"><el-table-columnlabel="日期"width="180"><template slot-scope="scope"><i class="el-icon-time"></i><span style="margin-left: 10px">{{ scope.row.date }}</span></template></el-table-column><el-table-columnlabel="姓名"width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><p>住址: {{ scope.row.address }}</p><div slot="reference" class="name-wrapper"><el-tag size="medium">{{ scope.row.name }}</el-tag></div></el-popover></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-buttonsize="mini"@click="handleEdit(scope.$index, scope.row)">编辑</el-button><el-buttonsize="mini"type="danger"@click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table>
</template><script>export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'}]}},methods: {handleEdit(index, row) {console.log(index, row);},handleDelete(index, row) {console.log(index, row);}}}
</script>

需求 : 我只需要上边两个按钮即可 , 不需要那么多的按钮

技术难点 : 因为 ElementUI 的 Table 表格 都是 通过它组件内自带的生成的东西 ,

所以我们只将其修改一个的话 , 必定会影响到其他布局的

解决实现 :

( 1 ) 首先可以简单实现将编辑按钮删除掉

( 2 ) 通过判断条件去实现我们需要的是哪一个按钮

更新后代码 :

<template><el-table:data="tableData"style="width: 100%"><el-table-columnlabel="日期"width="180"><template slot-scope="scope"><i class="el-icon-time"></i><span style="margin-left: 10px">{{ scope.row.date }}</span></template></el-table-column><el-table-columnlabel="姓名"width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><p>住址: {{ scope.row.address }}</p><div slot="reference" class="name-wrapper"><el-tag size="medium">{{ scope.row.name }}</el-tag></div></el-popover></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-buttonv-if="scope.row.btn == '需要'"size="mini"type="danger"@click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table>
</template><script>export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',btn: '需要'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄',btn: '需要'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'}]}},methods: {handleEdit(index, row) {console.log(index, row);},handleDelete(index, row) {console.log(index, row);}}}
</script>

表头设置背景色 

1、首先使用 elementUI 中的 header-cell-style 属性

<el-table:data="paperList":header-cell-style="getRowClass"
>

2、然后在 getRowClass 方法中 改变 css 样式

getRowClass({ rowIndex, columnIndex }) {if (rowIndex == 0) {return "background:#f8f8f9;";}
}

Pagination 分页

当数据量过多时,使用分页分解数据。


修改默认的文字 “前往”

问题描述

饿了么自带的分页组件,提供的跳转到某一页的文案是 “前往”,如下图所示

不过有时候我们想要换一个文案,但是看了一下官方文档,

分页组件没有提供默认的修改文字的插槽

解决方案 :

可以通过js的方式获取对应的DOM元素,然后修改其对应的值。我们先审查一下元素

找到元素了,类名为 el-pagination__jump
这样的话,我们就可以在页面初始化渲染的时候,去修改其内容。代码如下:

// 这里一定要是 mounted 生命周期里
mounted() {document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue = "跳转";
},

最终效果 :

当遇到组件解决不了的问题的时候,可以考虑使用原生js去实现对应的效果。


封装一个 分页组件 :

<!-- 功能 : 分页组件 -->
<template><div class="common-page"><el-pagination:current-page="currentPage":total="total"layout="total, sizes, prev, pager, next, jumper":page-sizes="pageSizes":page-size="pageSize"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div>
</template><script>
export default {name: "Page",props: {currentPage: {type: Number,},total: {type: Number,},pageSize: {type: Number,},pageSizes: {type:Array,},},methods: {handleSizeChange(val) {this.$emit("handleSizeChange", val);},handleCurrentChange(val) {this.$emit("handleCurrentChange", val);},},
};
</script><style lang="scss" scoped>
.common-page {text-align: center;margin: 50px 0;
}
</style>

Descriptions 描述列表

列表形式展示多个字段。


前端 Vue 报错 : Unknown custom element :

<el-descriptions> - did you register the component correctly?

上问题截图 :

原因 :版本问题 。

<el-descriptions> 是到了 element-ui 2.15.6 才开始更新的 ,

很多可能是开始做项目时用的是 2.13.2 版本 ,

所以加载 <el-descriptions> 会出错 。

解决办法 :把  element-ui  更新到最新版本即可 。

npm uninstall element-ui  卸载
npm i element-ui -S       安装

Loading 加载

加载数据时显示动效。

需求及背景 : 一个页面或组件内多次使用 Loading 加载效果 , 想要区分其样式

因此需要通过改变其 自定义的类名 来实现 , 因此要知道如何去使用 customClass

<divclass="tool-container"v-loading="loading"element-loading-text="拼命加载中"element-loading-spinner="el-icon-loading"element-loading-background="rgba(0, 0, 0, 0.8)"element-loading-custom-class="loading-icon"></div>

 项目使用案例:

<template><div><divclass="item-list"v-loading="exportLoading"element-loading-text="加载中..."element-loading-spinner="el-icon-loading"element-loading-background="rgba(0, 0, 0, 0.6)"element-loading-custom-class="exportIconLoading"@click="exportFiles"><img src="" alt="" /><span>导出</span></div></div>
</template><script>
import { debounce } from '@/utils/tools';
import { getToken } from '@/utils/auth';export default {data() {return {exportLoading: false, // 导出 loadinguserId: '',type: 'all',};},methods: {exportFiles: debounce(function () {this.exportLoading = true; // 开始加载axios.get(`/api/Export/userInfo?data=${this.userId}&type=${this.type}`,{headers: {Authorization: getToken(),},responseType: 'blob',}).then((response) => {let str = response.headers['content-disposition'].split(';')[1].split('=')[1];let fileName = decodeURI(str);if (window.navigator.msSaveOrOpenBlob) {// 兼容 IE10navigator.msSaveBlob(new Blob([response.data]),fileName);} else {let url = window.URL.createObjectURL(new Blob([response.data]));let link = document.createElement('a');link.style.display = 'none';link.href = url;link.setAttribute('download', `${fileName}`);document.body.appendChild(link);link.click();document.body.removeChild(link);}this.exportLoading = false; // 结束加载}).catch((err) => {this.$message.success('导出失败!');});},2000,true),},
};
</script><style lang="scss" scoped>
// 导出加载样式
::v-deep .exportIconLoading {> .el-loading-spinner {width: 100%;top: 50%;margin-top: 0;text-align: center;position: absolute;transform: translateY(-50%);// 修改 loading> i {color: #409eff;font-size: 50px;}}
}
</style>

Message 消息提示

常用于主动操作后的反馈提示。与 Notification 的区别是后者更多用于系统级通知的被动提醒。

bug 问题 :

ElementUI 按需引入 时 , 刷新页面 就会 显示出

Message 消息提示 和 MessageBox 弹框 的 问题

正常情况下,应该是点击按钮才触发 ,而不是现在这样页面刷新的时候就弹出来

解决方案 :

换一种引用方式即可解决

import {Message,MessageBox,
} from "element-ui";Vue.component(Message.name, Message);
Vue.component(MessageBox.name, MessageBox);

MessageBox 弹框

模拟系统的消息提示框而实现的一套模态对话框组件,用于消息提示、确认消息和提交内容。

修改 MessageBox 弹框 中确定和取消按钮顺序

需求:修改弹框中的 取消 / 确定按钮顺序, 及头部和底部背景颜色;

 通过设置类的样式来改变位置

【注意 : 一定不要写在 scope 内 , 可另起一组样式】

.el-message-box__btns {/* 确定按钮 */.confirmButton {color: #FFF;background-color: #409EFF;border-color: #409EFF;}/* 取消按钮 */.cancelButton {float: right;margin-left: 10px;color: #357AFF;background-color: #FFF;border-color: #409EFF;}
}

自定义

可自定义配置不同内容。

<template><el-button type="text" @click="open">点击打开 Message Box</el-button>
</template><script>
export default {methods: {open() {const h = this.$createElement;this.$msgbox({title: "消息",message: h("p", null, [h("span", null, "内容可以是 "),h("i", { style: "color: teal" }, "VNode"),]),showCancelButton: true,confirmButtonText: "确定",cancelButtonText: "取消",beforeClose: (action, instance, done) => {if (action === "confirm") {instance.confirmButtonLoading = true;instance.confirmButtonText = "执行中...";setTimeout(() => {done();setTimeout(() => {instance.confirmButtonLoading = false;}, 300);}, 3000);} else {done();}},}).then((action) => {this.$message({type: "info",message: "action: " + action,});});},},
};
</script>

 自定义简写写法 : 

methods: {open() {const h = this.$createElement;this.$msgbox({title: "提示",type: "warning",showCancelButton: true,confirmButtonText: "确定编辑",cancelButtonText: "取消",message: h("div", { style: "fontSize: 16px" }, [h("p", null, "内容可以是 "),h("p", null, "VNode"),]),}).then(() => {this.$router.push({path: "home",query: {id: 1,type: "2",},});}).catch(() => {});},},

Dialog 对话框

在保留当前页面状态的情况下,告知用户并承载相关操作。


在写 Vue 项目时候,
遇见如下需求:点击编辑按钮弹出一个 dialog , dialog 中的表单展示当前行显示数据,然后编辑后保存。
但是我点击后,出现了遮罩层,但是 dialog 怎么也不显示,如图

二、解决方案
这里是由于一个属性没有设置正确导致的问题。在 el-dialog 标签内,添加如图红色矩形框内所示属性。
即可解决问题。
写法上:
可以直接写  append-to-body
也可以写成  :append-to-body=“true”  ( 勿忘 +  :)
我更喜欢第一种,因为看起来更简洁。顺便补充第二种不要忘了加冒号 


打开 Dialog 页面存在 padding-right 的 bug 问题

问题重现:在页面没有打开 dialog 时 ,显示是正常的 。而在打开 dialog 后 ,页面的右侧会出现 padding-right:17px;

正常页面:页面布局不会出现任何变化。

在打开 dialog 后,可以看到右侧会出现空隙,页面布局被向左挤压

打开控制台查看代码可以看到 => 打开 dialog 后 ,

body 增加了一个 el-popup-parent--hidden 样式

解决方法:

( 1 ) 将 el-popup-parent--hidden 类样式的 padding-right 强制改成 0px

    .el-popup-parent--hidden {padding-right: 0 !important;}

( 2 ) 可以在 el-dialog 上加  :lock-scroll="false"


Timeline 时间线

可视化地呈现时间流信息。

自定义 el-timeline 节点样式

  <div class="left-lineBox"><el-timeline><el-timeline-itemv-for="(activity, index) in activities":key="index":icon="activity.icon":type="activity.type":color="activity.color":class="{eltimelinefocus: activity.type && activity.type == '01',}"size="normal"><p class="timeline-name">{{ activity.name }}</p><p class="timeline-content">{{ activity.content }}</p><p class="timeline-content" v-if="activity.idea"><span>意见: </span><span class="timeline-content__idea">{{ activity.idea }}</span></p><p class="timeline-content">{{ activity.timestamp }}</p></el-timeline-item></el-timeline></div>

测试数据

      activities: [{content: "郭艾伦 (人事专员)",name: "提交",timestamp: "2018-04-12 20:46",idea: "一朵小红花",color: "#4E97FF"},{content: "赵继伟 (人事主管)",name: "复核通过",timestamp: "2018-04-03 20:46",type: "01",color: "#4E97FF"},{content: "韩德君 (财务主管)",name: "复核2",timestamp: "2018-04-03 20:46"},{content: "贺天举 (董事长)",name: "审批",timestamp: "2018-04-03 20:46"}],

半透明圆环 样式

      .left-lineBox {margin-top: 12px;padding-left: 5px;.el-timeline {.el-timeline-item {padding-bottom: 1px !important;}}.el-timeline-item__node--normal {width: 7px;height: 7px;left: 2px;}.eltimelinefocus {.el-timeline-item__node {border: 2px solid hsla(0, 0%, 90%, 0.7);background-clip: content-box;background: rgba(78, 151, 255, 1);}.el-timeline-item__node--normal {left: 0px;width: 11px;height: 11px;}}.timeline-name {font-size: 13px;color: rgba(0, 0, 0, 0.7);}.timeline-content {color: rgba(0, 0, 0, 0.5);font-size: 12px;margin-top: 4px;.timeline-content__idea {color: rgba(0, 0, 0, 0.7);}}}

效果图


Image 图片

图片容器,在保留原生img的特性下,支持懒加载,自定义占位、加载失败等

el-image 使用本地图片

使用 require 引入本地文件

<el-image fit="contain" :src="require('@/assets/imgs/logo.png')"></el-image><el-image fit="contain" :src="url"></el-image>data(){return{url: require('@assets/image/LOGO1.png')}
}

InfiniteScroll 无限滚动

如何实现隔行变色 ?

右键 F12 检查其元素,才发现原来都是一堆 li 循环出来的,所以那就好办啦

li:nth-child(odd) {background-color: skyblue;
}
li:nth-child(even) {background-color: pink;
}

Drawer 抽屉

有些时候, Dialog 组件并不满足我们的需求, 比如你的表单很长, 亦或是你需要临时展示一些文档, Drawer 拥有和 Dialog 几乎相同的 API, 在 UI 上带来不一样的体验.


样式穿透问题 :

我现在不需要 elementUI 组件自带的下边距 , 所以需要对其样式进行一番调整

加 !important  增加其权重值无效果

 

改成对其 样式穿透 , 就有效果了

::v-deep .el-className {  }


Element UI _ 疑难杂症相关推荐

  1. element ui 空格_空格是您的UI朋友。 大量使用它。

    element ui 空格 Originally published at marcandrew.me on July 30th, 2020. 最初于 2020 年7月30日 在 marcandrew ...

  2. easyui前端实现多选框_前端:Element UI 多选框组用法笔记

    今天给大家分享一下Element UI 多选框组用法笔记,直接上代码! "兴趣爱好:"> "form.checkList"> for= {{item ...

  3. vue + element ui 的后台管理系统框架_从零开始搭建 VUE + Element UI后台管理系统框架...

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 后台管理系统前端框架,现在很流行的形式都是,上方和左侧都是导航菜单,中间是具体的内容.比如阿里云.七牛云.头条号.百家号等 ...

  4. element ui 前台模板_用 Vue+ElementUI 搭建后台管理极简模板

    本文由图雀社区成员https://blog.csdn.net/crxk_​blog.csdn.net 写在前面 此篇文章为一篇说明文档,不是教你从零构建一个后台管理系统,而是基于一个实际项目,已经搭建 ...

  5. element ui 前台模板_一个干净优雅的 Element UI Admin 模板

    在前后端分离的单页应用中,RBAC这样的权限模块一般我们的做法是,当用户登录的时候,后台返回当前用户所拥的全部角色的权限集(去重),这些权限集都是唯一的key.如 他们定义了每个功能的增删查改,或者更 ...

  6. element走马灯自动_[转]vue Element UI走马灯组件重写

    1.element ui走马灯组件 -- carousel 分析一波源代码: carousel/src/main.vue 文件为 el-carousel文件主要功能 carousel/src/item ...

  7. element ui 火狐_快速Firefox UI调整

    element ui 火狐 Are you looking for way to combine your Reload & Stop Buttons or perhaps you would ...

  8. axure element ui素材_【Axure分享】基于Element UI的Axure Web组件

    有一段时间没做过产品原型了,前一阵有一个web产品需要做原型,正好在搞前端,于是顺便把Element UI移植到Axure上,基本上实现了大部分的功能组件,部分过于繁琐的组件未实现. 自己觉得蛮满意的 ...

  9. elementui 上传七牛_用element ui上传图片到七牛踩过的坑

    前端上传图片到七牛云的流程 请求后端接口获取上传凭证 请求七牛云地址上传图片到七牛云 上传完毕将获得七牛云返回的图片地址 七牛云地址 说到七牛云地址,奴家真的是一把鼻涕一把泪 刚开始做图片上传的时候, ...

最新文章

  1. 批量修改table和index 的表空间
  2. 人类无法抗拒的10种心理(转)
  3. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...
  4. 【推荐系统】KDD2021推荐系统论文集锦
  5. linux中自动挂载脚本,LIUNX一键自动挂载脚本,宝塔磁盘LIUNX一键分区磁盘 | 帮助信息-动天数据...
  6. spring bean初始化及销毁你必须要掌握的回调方法。
  7. POJ 1192 最优连通子集(树形DP)
  8. a number of 和the number of用法
  9. (8)数据分析-卡方检验
  10. java 整数相乘_Java中两个int相乘的结果是怎么算的?
  11. Linux 分区简介
  12. mysql 自定义函数 找不到表,mysql判断表记录是否存在,不存在则插入新纪录
  13. 小波包8层分解与重构MATLAB代码,谐波小波包分解与重构程序谁有呢?
  14. 聊一聊,android程序员前景如何
  15. android 菜鸟面单打印_关于菜鸟的圆通电子面单打印
  16. 建筑物后期调色ps动作
  17. 支付宝账号转账/扫码即可到转账页
  18. 微服务架构通讯模式架构分析
  19. AcWing 3725. 卖罐头 有意思的数学推导 思维
  20. 湘潭大学信息安全课作业答案2

热门文章

  1. Servlet生命周期与Web容器架构及处理请求详解
  2. 关于岭回归和lasso回归
  3. 华星gps显示服务器错误,[科普] 差分GPS是怎么回事?
  4. Revit楼板:建筑楼板和结构楼板区别和垫层生成
  5. 烟台大学能小自考计算机么,烟台大学有自考本科吗?
  6. 蝉知门户系统迁移到SAE平台-对蝉知2.5版本部分功能的限制
  7. 基于虹软的人脸识别功能
  8. vba打开html文件,vba打开网页的四种方法
  9. TI高精度实验室-运算放大器-第九节-低失真运算放大器的设计
  10. golang Opts Pattern