Vue插件之ElementUI
适用vue开发pc版,可能最先接触到的就是ElementUI这个插件库了。
1.遮罩层背景在上面
在el-tab-pane组件中创建一个dialog,但是会出现遮罩层在上面,而内容在下面的问题。
根据参考文章,只需要添加:append-to-body=”true” 即可
1 | <el-dialog :visible.sync="dialogVisible" width="80%" :before-close="handleClose" :append-to-body="true"> |
1.element ui 弹窗遮罩层在弹出层的上面。点击关闭弹窗弹窗关闭了但是遮罩层没关 (有原理有真相,可以点赞)
2.保持默认参数的同时进行自定义传参
在使用Checkbox时,绑定组件的change事件,如何保持默认的参数并传入自定义的参数呢?
1 | <el-checkbox v-for="(item,siteLevelId) in sites.siteLevel" :label="item.LevelStr" :key="siteLevelId" |
如果像上面的方式传入了自定义的参数,那么默认的组件的选中状态就没有了,如果直接写成了@change=”handleCheckedSiteLevelChange”,那么默认的值只有ture和false,无法做到判断组件选中状态了。
1 | handleCheckedSiteLevelChange(value) { |
解决方案就是适用lamba表达式
1 | <el-checkbox v-for="(item,siteLevelId) in sites.siteLevel" :label="item.LevelStr" :key="siteLevelId" |
这样就可以同时获取默认值和自定义值了
1 | handleCheckedSiteLevelChange(e,value) { |
1.elementUI里CheckBox组件的change回调如何在使用自定义传参的条件下保留默认传参?
2.element-ui 框架的checkbox组件:点击事件 与 选中判断 - 代码篇 (这篇文章中多了一个e,但是这个e是如何传入的,没有说明,其实就相当于费代码)
3.elementUI里CheckBox组件的change回调如何在使用自定义传参的条件下保留默认传参 (这篇文章给了答案)
3.checkbox的选中状态无法动态更改
现象的描述,主要是使用for循环生成的checkbox组件,然后checkd属性是通过代码控制:checked=”test”的,当通过代码修改test的值为true或者是false时,checkbox的选中状态没有发生变化。
解决方式就是将:checked=”test” 换成:value=”test”,同时还要注意,外层不要有checkgroup,有了checkgroup也不可以,如果要有,也应该设置正确的值。
1.解决el-checkbox 无法全选,动态更新选中状态的问题 (这个没有用,在我的代码里没有checkbox group)
2.element ui 中checkbox或radio不可勾选/不可取消勾选/点击没有反应 (使用vue的$set方法设置,这个方法是不对的。)
3.el-checkbox 通过vuex修改checked checked状态没有改变 (这个问题很像,但是出现了两派观点,一种是将checked换成value有用,一种是没有用)
4.Injection “rootMenu” not found
在改别人的代码的时候,出现了问题:Cannot read property ‘activeIndex’ of undefined等等,出现一篇红,但是在代码里又找不到相关的内容。
最后是因为组件位置使用错误导致的
1.vue错误记录
5.input自动获取焦点
要想让input自动获取焦点,可以使用focus()函数,但是需要注意的是,要等到元素渲染成功之后进行调用,我就遇到了这个问题,总是使用this.$refs.input.focus(),就是不生效。有两种方法,一种是使用nextTick函数,一种是使用setTimeout函数。
(1) 添加ref
1 | <el-input v-model="input" placeholder="请输入内容" ref="input"></el-input> |
(2) 绑定事件
1 | this.$nextTick(() => { |
1.element组件el-input的focus方法要如何调用?我想主动触发这个input的focus (看回答)
2.vue element.ui 表单组件如何自动聚焦 (看回答)
3.vue div 获得焦点和失去焦点 (这篇没啥用)
4.Vue中监听键盘事件 (如何监听键盘事件,以及相应的代码编号)
5.element input输入框自动获取焦点 (这里有三种方式,一种是使用原生的getElementById,一种是nextTick,一种是使用自定义指令)
6.vue 监听键盘回车事件 @keyup.enter || @keyup.enter.native (监听鼠标事件)
6.[Vue报错(element UI):type check failed for prop “uniqueOpened”. Expected Boolean, got String.]
错误很简单,就是和参考文章中写的一样进行解决。
1 | // 将 |
7.单独引入Message组件
1 | import { Message } from 'element-ui'; |
7.滚动条
elementUI有自带的滚动条,但是文档上没有公开,el-scrollbar。
1 | <el-scrollbar wrap-class="list" wrap-style="color: red;" view-style="font-weight: bold;" view-class="view-box" :native="false"> |
1.Vue的自定义滚动,我用el-scrollbar
8.修改菜单栏父元素的点击样式
默认的菜单栏,当子菜单被选中的时候,父菜单时不高亮的。
通过覆盖样式,可以实现点击子菜单的时候,父菜单也出现高亮效果。
1 | .el-menu-vertical-demo{ |
9.table的max-height不起作用
table中使用:max-height=”tableHight”绑定一个值,动态的增加表格的高度,但是不起作用。
1 | let windowH=window.innerHeight; |
看图,第二个table的max-height是起作用了,但是第一个table貌似不起作用。解决方法就是使用$nextTick包裹tableHight。
1 | this.$nextTick(()=>{ |
1.element table max-heitght失效解决办法 (没有用)
2.el-table 根据屏幕大小动态设置max-height来自适应表格的最大高度出现滚动条 (这篇文章有用)
10.table表个多选
1.element-ui table多选CheckBox参数解析 (这篇文章,还写了如何在翻页的时候,如何保存已经选择的选项)
11.Cascader 级联选择器
在我使用级联选择器的时候,因为是动态创建的数据,从后台获取数据之后,然后组装生成 options 数组,进行动态展示,同时我有一个字段标致了已选项,我需要构造v-model,然后将已选中项填入进去。我有一个Doalog,打开的时候,去后台请求数据,然后生成可选项,已选项。但是我遇到的问题是,第一次打开对话框,自动填入正常,但是第二次打开对话框,自动填入的时候就会报错:Error in callback for watcher “options”: “TypeError: can’t access property “level”, node is null”。
解决方法:这个问题很奇怪,解决起来也是很随意的,我看源码的时候,没有看懂,但是我尝试了将option中的值,由数字类型,改为了字符串类型,于是虽然还是报错,但是最后还是把选择项回显了。
最后,我加了一个v-if进行控制,只有当 option 数组不为空的时候,才进行渲染,这样才解决了这个问题。后来我想想,可能是因为两者的渲染时机不同导致的,虽然同时赋予了可选列表对象,以及选择项的回显,但是如果不能先渲染可选列表对象,而是渲染的选择项,就会造成问题。
1.Cascader 级联选择器
2.element 级联选择器回显问题
3.解决element-ui中级联选择器(Cascader)出现空白选项的bug—空级联bug
4.element-ui 中 Cascader 级联选择器有没有什么办法判断它是否被全选 判断是否全选,思路倒是挺奇特的
5.关于element级联选择器数据回显问题
6.elementUI 级联选择器el-cascader 回显中爬坑。 这里给了我一个启发就是要不要加一个V-if
12.input无法修改值
这个问题,是我在使用v-for创建了多个 el-input 组件之后,其中的第一个第二个input可以进行值的修改,但是后面的部分就没法进行数据的更改,这就很让我纳闷了。
1.elementUI中input框无法输入的问题
2.Vue深度watch对象或数组新旧值打印的值相同问题解决 采用computed计算属性监听,间接打印新旧值。因为watch虽然监听到对象(或数组)内部变化,但是由于新旧值同源,导致没有更新。可采用computed计算属性进行对源对象的深拷贝,完成新值更新。
13.表格自动滚动
1.element表格组件,内容自动滚动(并可设置)
2.element el-table组件实现列表自动滚动 要钱的,可能大部分都会被劝退吧。
3.vue js 添加自动滚动效果(单击滚动暂停,再次点击继续滚动)
14.el-input使用计算属性的问题
如果在el-input钟使用v-model绑定到计算属性上,可能就会有问题,因为 v-model 是双向绑定,修改显示,内容也修改了,但是计算属性是缓存,这样就会造成冲突,当计算属性修改之后,是使用双向绑定的值还是使用计算属性的值呢?
1.vue 获取el-input 绑定的value值
2.在vue中 input的v-model和computed一起使用出现的问题 1.用computed,不用v-model,也就是使用 :value 代替v-model ;2.用watch,和v-model,不用computed;3.用computed 的get和set
15.表格中的slot-scope不起作用
[问题描述]
页面中有两个div,div中分别包裹了一个table,通过 v-if 根据一定的条件渲染其中的一个表格,剩下的渲染另外的一个table。
1 | <template> |
[问题现象]
第一个table可以通过 template slot-scope=”scope”,渲染一定条件的单元格内容,但是当切换条件的时候,第二个表格只能有一个template,剩下的template都渲染不出来。
[解决方法]
至于为什么不行,我暂时不知道。解决方法,不能用v-if进行条件渲染,需要改为v-show进行渲染。
1.elementUI el-table 表格的 slot-scope=“scope“插槽不生效的解决方案_我的兵之初的博客-程序员宝宝
2.elementui table slot-scope=”scope”值不能更新的问题
16.el-upload组件增加认证
普通的上传组件,加入el-upload就可以了,但是我的上传接口,都需要经过认证的,如何才能保证上传的时候加入认证信息呢?
1 | <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/"> |
【解决】
通过设置headers可以自定义请求头
1 | <el-upload class="upload-demo" :action="apigateway+'/simulation/upload'" :on-success="handleSuccess" :headers="headers"> |
1.element-UI 中的upload组件如何添加token? 使用 before-upload ,自定义上传过程
2.Element el-upload上传组件详解 使用 data 属性,定义上传时提交数据,以及选取和上传分开处理
3.ElementUI上传图片携带token请求头 使用headers参数传递请求头信息
4.element-ui el-upload手动控制上传事件 手动触发上传:this.$refs[‘upload’].$children[0].$refs.input.click()
17.按需引入
(1) 安装babel-plugin-component
npm install babel-plugin-component -D
(2) 安装ElementUI
npm i element-ui -S
(3) 配置.babel.config.js
babel7.0之后,就放弃了.babelrc,改为使用.babel.config.js提供配置文件,然后修改文件内容为:
1 | module.exports = { |
官网上给的是将.babelrc修改为下面的内容,这里解释一下,其实这个presets-es2015和presets-env是两个不同的模块,需要单独安装,但是官方推荐是使用presets-env代替es2015,说env是永不过时的,同理可以推测,其实@vue/app也是一个插件,指定了如何编译和转换vue组件
1 | { |
(4) 使用
1 | import { Button, Select } from 'element-ui'; |
18.表格无限滚动
使用参考文章1的内容,基本上可以完成需求,自己尝试一下就可以了。
1.element-ui的el-table表格实现无限滚动,使用自带的infinite-scroll 这是自定义了无限滚动指令
2.Element——在el-table上使用无限滚动加载_Believer_abby的博客-程序员信息网_element table 无限滚动 这里增加了一个 el-table-infinite-scroll 插件,但是我使用的时候,发现还是无法安装依赖,core-js/modules/es.error.cause.js 报错
3.core-js/modules/es.error.cause.js 报错 先删除 node_modules 依赖,安装报错的插件
4.element-ui 的 el-table 上使用无限滚动加载 这个也是安装了el-table-infinite-scroll,给了例子,给了实现原理,但是我使用pnpm安装这个插件的时候,总是报错,最后我放弃了这个插件。
19.表格合并行列
使用element ui表格的时候,有一个需求就是动态合并某几列,比如就是说把所有奇数列的后面一列和前面一列进行合并,就像下面的这样合并,除了合并之外,还有一个要求,就是把后面的值保留,因为前面的是一个空值。
指定表格的 span-method 方法,当行有SiteLevel标志时,第一列不进行处理,从第二列开始,奇数列往后合并一列,偶数列删除,显示的值就是奇数列的值。
1 | // 合并总表的单元格 |
结果就像这样:
本来我想着是合并前后两列的值,最后单元格剩下的值是后面一个的值,没有办法,似乎做不到,我只能调整了表头的顺序,把后面单元格的值放到前面,往后合并,后面的删除。
后来我又尝试了删除奇数列,然后偶数列向后合并一列,可以这么做。因为我要保留最后一列的值,不能进行删除,所以进行了非等判断。
1 | // 合并总表的单元格 |
1.elementUI table表格动态合并行
2.element-ui 表格合并 span-method 这个作为最初的例子,但是我还是没有真的理解其中的东西:第二行的第二列有一行三列合并。至于那个合并看他else里面行数设置成0的内容。下面就是3列或者4列是0,也就是被合并的内容
3.elementui如何合并单元格,并且赋值索引,加上序号 _row:代表合并行的行数,_row的值要么是1,或者更大的自然正整数,要么是0。1代表:独占一行。更大的自然数:代表合并了若干行。0:代表“消失”的哪那一个单元格,后面的单元格向前推一格
4.vue element ui合并表格(合并某列的行数据)
5.element-ui table :span-method(行合并) 这个是后台获取数据的并进行合并的例子
6.element-ui table中span-method(行合并)方法使用 return [0,0]为当前的单元格上下左右合并均为0,即删除该单元格;return [2,1]为当前的单元格只向下合并2行;return [1,2]为当前的单元格只向右合并2列;return [1,1]为当前的单元格保持不变,不合并;
20.动态列宽
在动态创建的列里面,设置列宽,可以通过:with 函数进行设置。
1.el-table-column动态设置列宽 这个解决了我的问题
2.css控制table的td宽度
3.table中的th,td宽度设置无效
4.table标签内的td、th如何设置固定宽度,而不是自适应?
21.固定列无法自适应宽度
像下面这张图,有多级表头,有滚动条,并且第一列是固定列,当移动滚动条的时候,这个固定列就只显示一半的宽度了。
【解决方法】
默认的表格的固定列是 el-table__fixed ,宽度是 80px,这个可以通过设置css进行覆盖。