element table 自適應(yīng)外面盒子的高度唬滑,可以通過添加自定義指令來解決
1 在src下面創(chuàng)建一個directive文件夾它掂,再創(chuàng)建index.js和tableHeight.js
tableHeight.js 代碼如下:
import {
addResizeListener,
removeResizeListener
} from 'element-ui/src/utils/resize-event'
// 設(shè)置表格高度
const doResize = async (el, binding, vnode) => {
// 獲取表格Dom對象
const {
componentInstance: $table
} = await vnode
// 獲取調(diào)用傳遞過來的數(shù)據(jù)
const {
value
} = binding
// if (!$table.height) {
// throw new Error(`el-$table must set the height. Such as height='100px'`)
// }
// console.log($table, '$table$table$table$table')
// 獲取距底部距離(用于展示頁碼等信息)
const bottomOffset = (value && value.bottomOffset) || 30
if (!$table) return
// 計算列表高度并設(shè)置
const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
// $table.layout.setMaxHeight(height)
$table.layout.setHeight(height)
// $table.maxHeight = height
$table.doLayout()
}
export default {
// 初始化設(shè)置
bind(el, binding, vnode) {
// 設(shè)置resize監(jiān)聽方法
el.resizeListener = async () => {
await doResize(el, binding, vnode)
}
// 綁定監(jiān)聽方法到addResizeListener
addResizeListener(window.document.body, el.resizeListener)
},
// // 綁定默認(rèn)高度
async inserted(el, binding, vnode) {
await doResize(el, binding, vnode)
},
// // 銷毀時設(shè)置
unbind(el) {
// 移除resize監(jiān)聽
removeResizeListener(el, el.resizeListener)
}
}
index.js代碼如下:
import tableHeight from './tableHeight'
const install = function (Vue) {
// 綁定v-adaptive指令
Vue.directive('tableHeight', tableHeight)
}
if (window.Vue) {
window['tableHeight'] = tableHeight
// eslint-disable-next-line no-undef
Vue.use(install)
}
tableHeight.install = install
export default tableHeight
main.js 里面添加如圖代碼
// 這個是你剛剛寫的index.js的路徑
import tableHeight from '@/directive/index.js'
// 表格自適應(yīng)指令
Vue.use(tableHeight)
模板里面的使用如圖:
<el-table :data="tableData" stripe style="width: 100%" height="100px" v-tableHeight="{bottomOffset: 60}">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
<el-table-column prop="caozuo" label="操作" fixed="right"></el-table-column>
</el-table>