el-table 动态修改高度, 封装mixins

本文介绍了一个Vue mixin,用于动态监听页面resize事件,调整表格高度以适应视口变化。通过配置subtractHeight参数,可以在组件创建和销毁时适配窗口大小,确保table的流畅滚动。同时,展示了如何在组件中使用这个mixin,并提供了根据需求动态更改subtractHeight的方法。此解决方案在实际应用中可能存在优化空间,欢迎进一步讨论。

mixins如下,通过监听页面的resize事件,当页面视窗大小变化的时候,
动态将当前视窗高度减去固定的高度值,使得table能够动态滑动。

export default (config) => {
  const {
    subtractHeight = 250,
  } = config;
  return {
    data() {
      return {
        subtractHeight,
        // 列表高度
        tableHeight: `${document.body.clientHeight - this.subtractHeight}px`,
      };
    },
    created() {
      window.addEventListener('resize', this.getHeight);
      // 监听事件注销,防止内存溢出
      this.$once('hook:beforeDestory', () => {
        window.removeEventListener('resize', this.getHeight);
      });
    },
    mounted() {
      this.getHeight();
    },
    watch: {
      subtractHeight: {
        handler() {
          this.getHeight();
        },
      },
    },
    methods: {
      /**
       * @todo 获取列表高度
       */
      getHeight() {
        this.tableHeight = `${document.body.clientHeight - this.subtractHeight}px`;
      },
    },
  };
};

vue组件中使用方式为

<a-table
      id="aTable"
      v-loading="tableLoad"
      :height="tableHeight"
      :columns="columns"
      :row-class-name="tableRowClassName"
      :data="list"
      @cell-dblclick="dblclick"
      @row-contextmenu="rightClick"
    >
.....

import Heightmixin from '@/mixins/tableHeight-mixin';

const initalSubsubtractHeight = 570;
const heights = new Heightmixin({
  subtractHeight: initalSubsubtractHeight,
});
export default {
  	mixins: [heights],
	// 涉及到搜索列表的展开和折叠,可能需要动态更改subtractHeight,此时可以进行方法传递。
	// 通过watch来进行table动态的更改。
	showFormFun() {
	  this.showForm = !this.showForm;
	  this.subtractHeight = this.showForm ? initalSubsubtractHeight : 232;
	},
}

总结:方法感觉还不是特别完善,已经算是满足要求了,应该还有好多可以抽离成mixin的方法,
动态监听表格高度只是其一,欢迎大家指教。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值