Table
固定表头
只要在el-table
元素中定义了height
属性,即可实现 固定表头的表格,而不需要额外的代码。
例如:
...
这里文档只给了一种固定高度250px的解决方案,实际应用大多数是需要自适应占满父元素,超出滚动固定表头的。
值得一提的是,height
可以动态绑定,我的解决方案是给表格包一个父元素,并绑定一个值100%
给height
。
height
:Table
的高度,默认为自动高度。如果height
为number
类型,单位px
;如果height
为string
类型,则这个高度会设置为Table
的style.height
的值,Table
的高度会受控于外部样式。
点击事件
点击事件刚开始在这里陷入深坑了,拿行的点击事件来讲:row-dblclick
: 表格的某一行双击事件。首先是dblclick
而不是dbclick
!(不知为什么我vscode
提示row-dbclick
,醉了),其次调用加@
,然后默认参数通常用到最多的是row
,不用在括号里写明,在方法里直接声明就可以用了;row-click
同理。
例如:
...
配合vue过滤器
主要使用自定义列
,参数为 { row, column, $index }
{{ scope.row.platform.rise | percent(2) | sign(scope.row.platform.change) | nvl('--')}}
//scope.row是当前列的值,prop其实可以不写
自定义表头
文档解释比较简单:
render-header | 列标题 Label 区域渲染使用的 Function | Function(h, { column, $index }) | — | — |
---|
实现效果:
鼠标移上去会有提示文字弹出,这里用el-tooltips
。
-
无效方案:
renderHeader (h, { column, $index }) { return h('el-tooltip', { props: { effect: 'light', content: '根据交易所24小时成交量占比和实时价格加权计算得到', } },[ h('span', column.label), h('i', { class: 'icon-tips', } }) ]);
渲染结果是一个
span
包含了label
文字,同时有名为el-tooltip
的class
,并无小图标,后边中括号结构里只能有一个(有待考证)。 -
可行方案:
renderHeader (h, { column, $index }) { return [ h('span', column.label), h( 'el-tooltip', { props: { effect: 'light', content: (function () { let label = column.label; switch (label) { case '加权最新价': return '根据交易所24小时成交量占比和实时价格加权计算得到'; break; case '偏移价': return '交易所该币对当前最新价-加权价'; break; } })(), } }, [ h('i', { class: 'icon-tips' }) ] ), h('span', { class: { 'el-icon-question': true } }) ]; },
事实证明返回的这个数组,可以作为表头内真正的标签元素多个累加,最后一个
span
是我追加的,其实是多余的,参考ElementUI的Table组件中的renderHeader方法研究,作者研究很透彻,最后把span
替换成p
也能正常渲染,这是我最后一步尝试的,说明数组内的渲染机制,而h
或createElement
渲染函数第三个数组参数大于一个的结构均不能被渲染上,而且本标签无论如何都被渲染为span
,郁闷。
先这么使用吧,算是满足需求了
vue关于createElement函数,
domProps
了解下,简单的结构可以用这个实现
可行方案二:使用
jsx
,直接return (HTML结构)
表格滚动到顶部或底部(原链接)
$refs.table
: 为el-table
设置的ref
属性
滚动到第一行:
this.$refs.table.bodyWrapper.scrollTop =0;
滚动到最后一行:
this.$refs.table.bodyWrapper.scrollTop =this.$refs.table.bodyWrapper.scrollHeight;
upload
上传组件控制上传图片尺寸
主要在before-upload
函数中限制尺寸大小等。
点击上传
只能上传jpg/jpeg文件,且不超过500kb
beforePicUpload (file) {
const isSize = new Promise(function(resolve, reject) {
let width = 200;
let height = 54;
let _URL = window.URL || window.webkitURL;
let img = new Image();
img.onload = function() {
let valid = img.width == width && img.height == height;
valid ? resolve() : reject();
}
img.src = _URL.createObjectURL(file);
}).then(() => {
return file;
}, () => {
this.$message.error('上传图片尺寸要求200*200!');
return Promise.reject();
});
}
Element UI
的文件上传组件el-upload
的表单校验required
问题
template
:
//...
点击上传
支持格式:jpg、jpeg 像素要求640*240
//...
script
:
export default {
data () {
collectionInfos: {},
rules: {
...
resource_url: [
{ required: true, message: '请选择合辑封面', trigger: 'blur, change' },
]
},
},
}
类似这样的校验规则在空表单提交时是会正常显示请选择合辑封面
的错误提示的,然而在你上传完图片后再次提交,依然会校验不通过,因
为在你选择手动提交文件时,这个resource_url
就不可能像自动上传那样有值了,除非手动赋值,而文件的改变删除等变动当然由on-change
事件处理比较合适,而且我试了多次,其他地方还是会出现校验不通过的情况,如下图:
//el-upload组件里绑定的事件(可以参开上面template)
handleChange (file, fileList) {
this.file = fileList;
this.$set(this.collectionInfos, 'resource_url',file.url);
},
这样就解决了。