修改 el-table 自适应高度指令

This commit is contained in:
zhouyuntao 2019-03-14 11:22:03 +08:00
parent 162bbbc027
commit 8d3bc85c46
1 changed files with 42 additions and 13 deletions

View File

@ -1,32 +1,61 @@
export default{ import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event';
/** /**
* 仅当 el-table :data属性为动态加载不包括computed才会触发此事件 已为 el-table 设置 height 的初始值(任何值) 此指令才起作用 * 用法
* <el-table height="50" ref="table" v-el-height-adaptive-table="{table: $refs.table}">...</el-table>
* 必须设置 height,可以任意值
*/
export default{
bind(el, binding, vnode, oldVnode) {
el.data = {}
el.resizeListener = () => {
let data = el.data
if (!data.table) {
return
}
let height = window.innerHeight - el.offsetTop - data.bottomHeight - data.topHeight;
data.table.layout.setHeight(height)
data.table.doLayout()
}
addResizeListener(el, el.resizeListener)
},
/**
*
* @param {*} el * @param {*} el
* @param {*} binding * @param {*} binding
* binding.value 格式为 { * binding.value 格式为 {
* table: $refs.table, // 表格对象 * table: $refs.table, // 表格对象
* topHeight: 10 // 表格顶边 距离顶部高度,默认值为 10 * topHeight: 140 // 表格顶边 距离顶部高度,默认值为 140
* footerHeight: 10 // 表格底部 距离底部高度,默认值为 10 * bottomHeight: 120 // 表格底部 距离底部高度,默认值为 120
* } * }
* @param {*} vnode * @param {*} vnode
* @param {*} oldVnode * @param {*} oldVnode
*/ */
update(el, binding, vnode, oldVnode) { update(el, binding, vnode, oldVnode) {
let topHeight = binding.value.topHeight ? binding.value.topHeight : 10 if (el.heightInited) {
let footerHeight = binding.value.footerHeight ? binding.value.footerHeight : 10 return
}
let topHeight = binding.value.topHeight ? binding.value.topHeight : 140
let bottomHeight = binding.value.bottomHeight ? binding.value.bottomHeight : 120
let table = binding.value.table let table = binding.value.table
let tableHeight = window.innerHeight - el.offsetTop - footerHeight - topHeight; el.data.table = table
table.layout.setHeight(tableHeight) el.data.topHeight = topHeight
el.data.bottomHeight = bottomHeight
let height = window.innerHeight - el.offsetTop - bottomHeight - topHeight
table.layout.setHeight(height)
table.doLayout() table.doLayout()
// 监听窗口大小变化 el.heightInited = true;
window.addEventListener("resize", () => {
tableHeight = window.innerHeight - el.offsetTop - footerHeight - topHeight },
table.layout.setHeight(tableHeight) unbind(el) {
table.doLayout() removeResizeListener(el, el.resizeListener)
})
} }
} }