vue2,vue3自适应表格高度,自定义指令

vue2,vue3自适应表格高度,自定义指令

vu2:

main.js中引入相应文件夹
import '../src/directive/tableAdaptive'
tableAdaptive.js
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
import Vue from 'vue'
/**
 * 自适应表格高度
 * 使用:
 * <el-table height="100px" v-adaptive="{bottomOffset: 30}">...</el-table>
 * bottomOffset 代表距离底部的距离
 * bottomOffset: 30(default)   // 从这一页的底部到表格的高度.
 */
// 设置表格高度
const doResize = (el, binding, vnode) => {
  const { componentInstance: $table } = vnode
  // 获取调用传递过来的数据
  const { value } = binding
  // if (!$table.height) {
  if ($table.height === -1) {
    // 获取距底部距离(用于展示页码等信息)
    const bottomOffset = (value && value.bottomOffset) || 90
    if (!$table) return
    // 计算列表高度并设置
    const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
    $table.layout.setHeight(height)
    $table.doLayout()
  }
}

Vue.directive('tableAdaptive', {
  // 初始化设置
  bind(el, binding, vnode) {
    // 设置resize监听方法
    el.resizeListener = () => {
      doResize(el, binding, vnode)
    }
    // window.onresize = () => {
    //   console.log('onresize')
    // }
    // parameter 1 is must be "Element" type
    let domEl = document.getElementsByClassName('head-container')[0]
    if (domEl) {
      addResizeListener(domEl, el.resizeListener)
    }
    addResizeListener(window.document.body, el.resizeListener)
    // 绑定监听方法到addResizeListener
    // window.addEventListener('resize', el.resizeListener)
  },
  // 绑定默认高度
  inserted(el, binding, vnode) {
    doResize(el, binding, vnode)
  },
  // 销毁时设置
  unbind(el) {
    removeResizeListener(window.document.body, el.resizeListener)
    // 移除resize监听
    window.removeEventListener('resize', el.resizeListener)
  }
})


vue3:

main.js
import directives from './directives'
 app = createApp(App)
  app
    .use(directives)
    .mount(container ? container.querySelector('#app') : '#app')

npm install element-ui-plus --save

tableAdaptive.js
import { addResizeListener, removeResizeListener } from 'element-ui-plus/src/utils/resize-event'
/**
 * 自适应表格高度
 * 使用:
 * <el-table height="100px" v-adaptive="{bottomOffset: 30}">...</el-table>
 * bottomOffset 代表距离底部的距离
 * bottomOffset: 30(default)   // 从这一页的底部到表格的高度.
 */
export default {
  // 初始化设置
  beforeMount(el, binding, vnode) {
    const { value } = binding
    const bottomOffset = (value && value.bottomOffset) || 90
    // 计算列表高度并设置
    const height = window.innerHeight - bottomOffset
    el.style.height = height + 'px'
    // 设置resize监听方法
    el.resizeListener = () => {
      // 获取调用传递过来的数据
      const { value } = binding

      // 获取距底部距离(用于展示页码等信息)
      const bottomOffset = (value && value.bottomOffset) || 90

      // 计算列表高度并设置
      const height = window.innerHeight - bottomOffset
      el.style.height = height + 'px'
    }
    const domEl = document.getElementsByClassName('head-container')[0]
    if (domEl) {
      addResizeListener(domEl, el.resizeListener)
    }
    addResizeListener(window.document.body, el.resizeListener)
  },
  // 绑定默认高度
  mouned(el, binding, vnode) {
    // 获取调用传递过来的数据
    const { value } = binding
    // 获取距底部距离(用于展示页码等信息)
    const bottomOffset = (value && value.bottomOffset) || 90
    // 计算列表高度并设置
    const height = window.innerHeight - bottomOffset
    el.style.height = height + 'px'
  },
  // 销毁时设置
  unmounted(el) {
    removeResizeListener(window.document.body, el.resizeListener)
    // 移除resize监听
    window.removeEventListener('resize', el.resizeListener)
  }
}

vue3官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值