Skip to content

Commit 17f0d84

Browse files
yuntao1997PanJiaChen
authored andcommitted
feature[Directive]: add auto-height table directive (#1702)
1 parent f38d581 commit 17f0d84

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

src/directive/el-table/adaptive.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
2+
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
3+
4+
/**
5+
* How to use
6+
* <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
7+
* el-table height is must be set
8+
* bottomOffset: 30(default) // The height of the table from the bottom of the page.
9+
*/
10+
11+
const doResize = (el, binding, vnode) => {
12+
const { componentInstance: $table } = vnode
13+
14+
const { value } = binding
15+
16+
if (!$table.height) {
17+
throw new Error(`el-$table must set the height. Such as height='100px'`)
18+
}
19+
const bottomOffset = (value && value.bottomOffset) || 30
20+
21+
if (!$table) return
22+
23+
const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
24+
$table.layout.setHeight(height)
25+
$table.doLayout()
26+
}
27+
28+
export default {
29+
bind(el, binding, vnode) {
30+
el.resizeListener = () => {
31+
doResize(el, binding, vnode)
32+
}
33+
34+
addResizeListener(el, el.resizeListener)
35+
},
36+
inserted(el, binding, vnode) {
37+
doResize(el, binding, vnode)
38+
},
39+
unbind(el) {
40+
removeResizeListener(el, el.resizeListener)
41+
}
42+
}

src/directive/el-table/index.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
import adaptive from './adaptive'
3+
4+
const install = function(Vue) {
5+
Vue.directive('el-height-adaptive-table', adaptive)
6+
}
7+
8+
if (window.Vue) {
9+
window['el-height-adaptive-table'] = adaptive
10+
Vue.use(install); // eslint-disable-line
11+
}
12+
13+
adaptive.install = install
14+
export default adaptive

0 commit comments

Comments
 (0)