vue-element-pro-components
Version:
This is a vue2、element-ui based component library
46 lines (37 loc) • 1.22 kB
JavaScript
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
/**
* How to use
* <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
* el-table height is must be set
* bottomOffset: 30(default) // The height of the table from the bottom of the page.
*/
const doResize = async (el, binding, vnode) => {
const { componentInstance: $table } = await vnode
const { value } = binding
if (!value.autoHeight) {
return false
}
if (!$table.height) {
return false
}
const bottomOffset = (value && value.bottomOffset) || 30
if (!$table) return
const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
$table.layout.setHeight(height)
$table.doLayout()
}
export default {
async bind(el, binding, vnode) {
el.resizeListener = async () => {
await doResize(el, binding, vnode)
}
// parameter 1 is must be "Element" type
await addResizeListener(window.document.body, el.resizeListener)
},
async inserted(el, binding, vnode) {
await doResize(el, binding, vnode)
},
async unbind(el) {
await removeResizeListener(window.document.body, el.resizeListener)
}
}