这篇文章主要介绍了Vue 自适应高度表格的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

示例版本为 Element-ui 2.13.1 + Vue 2.6.11

在使用过程中 表格 是必不可少的一个控件,用于展示数据,单页数据量过多就会导致浏览器自动生成右侧滚动条。

如果页面有头部信息或查询按钮,移动滚动条后会遮挡住这些操作和信息内容。

Element-UI 中的 el-table 提供了设置高度的选项,在代码中设置 height 属性就可以现在表格的高度,数据量过多也只会在表格内部生成滚动条,而不是整个页面生成滚动条。

但是这个高度需要固定的数值,不同的分辨率或者缩放后的浏览器使用固定高度后,不能满足只在 el-table 内部生成滚动条的条件。

方案一:

想要满足上述条件就需要使用 v-adaptive 指令了。

Vue 自定义指令

你可能会好奇 v-adaptive 是在哪里来的?它是自定义的指令,设置表格高度需要对普通 DOM 元素进行底层操作。Vue 除了核心功能默认内置的指令 ( v-model 和  v-show ),也允许注册自定义指令,相关 Api 可以查看 官方文档 。

v-adaptive

新建包名 src/directive/el-table ,创建 adaptive.js 。页面缩放的监听是使用的 element-ui 中的 resize-event ,将 addResizeListener 和 removeResizeListener 引入进来。自定义指令要用到的钩子函数:

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  • unbind:只调用一次,指令与元素解绑时调用。
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'// 设置表格高度const doResize = async(el, binding, vnode) => {// 获取表格Dom对象const { componentInstance: $table } = await vnode// 获取调用传递过来的数据 const { value } = bindingif (!$table.height) {throw new Error(`el-$table must set the height. Such as height='100px'`)}// 获取距底部距离(用于展示页码等信息)const bottomOffset = (value && value.bottomOffset) || 30if (!$table) return// 计算列表高度并设置const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset$table.layout.setHeight(height)$table.doLayout()
}export default {  // 初始化设置bind(el, binding, vnode) { // 设置resize监听方法el.resizeListener = async() => { await doResize(el, binding, vnode)}    // 绑定监听方法到addResizeListeneraddResizeListener(window.document.body, el.resizeListener)  },  // 绑定默认高度async inserted(el, binding, vnode) { await doResize(el, binding, vnode)  },  // 销毁时设置unbind(el) { // 移除resize监听removeResizeListener(el, el.resizeListener)  }
}

接下来,需要将写好的逻辑绑定到 Vue 中,在同一目录下新建 index.js :

import adaptive from './adaptive'const install = function(Vue) {   // 绑定v-adaptive指令Vue.directive('adaptive', adaptive)
}if (window.Vue) {window['adaptive'] = adaptive  // eslint-disable-next-line no-undef Vue.use(install)
}adaptive.install = installexport default adaptive

在单页面使用

指令相关代码已经写好了,接下来就是该如何使用了。找到想要设置表格自适应高度的 vue 文件,在 script 标签下引入自定义的指令并绑定。

import adaptive from '@/directive/el-table'
export default { name:'Test',directives: { adaptive },... ...
}

然后找到表格所在的标签添加指令相关的代码:

<el-table  ref="table"// 自定义指令,bottomOffset 代表距离底部的距离v-adaptive="{bottomOffset: 85}"// 高度属性,100无具体意义,仅为初始值,不可省略height="100px" >... ...</table>

全局使用

如果存在多个页面需要设置自适应高度,为了减少使用指令的复杂度,我们可以在 main.js 中全局引入自定义的指令,上述 script 的内容就不需要在每个页面进行写入了。

import adaptive from './directive/el-table'Vue.use(adaptive)

方案二:

resizeTable() {setTimeout(() => {const table = this.$refs.tableconst height = window.innerHeight - table.$el.offsetTop - 60table.layout.setHeight(height)}, 0)}

Vue 自适应高度表格的实现方法相关推荐

  1. 微信小程序的swiper轮播图中的图片设置自适应高度的一种方法

    微信小程序的swiper轮播图中的图片设置自适应高度的一种方法 小程序中的轮播图很简单,但是唯一的缺陷就是 swiper 是固定的150px 高度(320px 宽度),这样如果传入的图片大于这个高度就 ...

  2. 自适应高度表格_React实现自适应高度的lt;textareagt;

    先看东西 我们要实现一个自适应高度的,如下: https://oonne.github.io/react-textarea/build/ 思路 ,文本区域,在表单中经常要用到.使用rows属性可以定义 ...

  3. 自适应高度表格_【干货分享】Word制作表格,这几个技巧必须要学会!

    快点这里订阅最有趣有料的3D/VR/AR/Ai数字化资讯 如果你对Word不是很熟练,那制作表格起来可能特别费劲.这里,就给大家分享几个,必须要掌握的制表技巧. 01表格前面加空行 制作好表格以后,如 ...

  4. QComboBox下拉框文字如何在字体变大之后自适应高度

    一.简述 一般我们给QComboBox设置完字体之后,在显示上并没有什么问题如下图. a.正常状态 由于程序在最大化的时候,因为主窗口尺寸变大,需要整体改变所有控件的尺寸,文字的大小,所以在窗口最大化 ...

  5. vue移动端表格吸顶、行自适应高度、列左侧固定悬浮

    简介 1.表头吸顶效果 2.左侧列固定,右侧滑动,表头跟随内容滑动 3.行高自适应 番外 最近上海疫情,居家办公一月多了,愿阴霾散去.最近网上在正常得市民抱怨中,有很多别有用心之人,数典忘祖,造谣生事 ...

  6. vue vue的table表格自适应_vue table autoHeight(vue 表格自动高度)

    小编主要做的都是后台管理系统,采用布局多为头部.左侧菜单栏,右侧内容,头部和菜单栏固定位置,内容部分如果很长就会出现滚动条(iview和element都提供了布局容器),后台管理系统多为表格的增删改查 ...

  7. alter table add column多个字段_ElementUI表格el-table表头固定自适应高度解决方案

    一.前言 ElementUI.iView都以相同的方式提供了表格组件表头固定的方法,即设置组件的height属性.表头固定很重要,就在于当表格数据项很多时,滚动条出现在表格组件内,而不是出现在表格组件 ...

  8. layui的轮播图片自适应大小_解决Layui 表格自适应高度的问题

    解决Layui 表格自适应高度的问题 鄙人在写一个项目,发现成功将数据在页面显示后, 高度没有自适应,而是将一些按钮遮挡了,不断的调试和网上寻找解决办法,发现没有效果,最后添加了一句css .layu ...

  9. html表格高度自动调整,table表格自适应高度的办法

    这篇文章主要为大家详细介绍了table表格自适应高度的办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 关于自适应高度,361源码在以前给大家介绍过ifram ...

最新文章

  1. appium python框架结构,GitHub - wyybingo/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...
  2. java jni key_JNIKeyProtection
  3. WINDOWS SERVER 2003从入门到精通之配置DHCP服务器(下)
  4. JSValidation 配置文件
  5. 卷积转换为矩阵运算中填充数的计算-GEMM
  6. numpy.newaxis详解
  7. 当我们在谈深度学习时,到底在谈论什么(三)--转
  8. 使用资源文件绘制Win32对话框
  9. 带项目的一些体会以及合格的 Leader 应该具备什么特质?(转)
  10. MAC系统使用Homebrew安装nvm
  11. Go三种方式创建赋值map
  12. java迪杰斯特拉算法介绍_178-迪杰斯特拉(Dijkstra)算法基本介绍
  13. 美团点评移动端基础日志库——Logan
  14. 操作系统之进程管理:13、吸烟者问题
  15. Qt5Widgetsd.lib(Qt5Widgetsd.dll) : fatalerror LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突
  16. 雨林木风SP3YN9.9 装机版09年09月更新(终结版)
  17. Web_php_unserialize,XCTF-Web_php_unserialize
  18. 汉字转拼音函数SQLSERVER数据库
  19. 实数在计算机上存储,实数如何在内存中存储
  20. iOS Healthkit 使用探索分析

热门文章

  1. [谨记]女人面前莫谈年龄
  2. DBN深度信念网络算法
  3. 水文预报中的确定性系数如何计算确定
  4. leetcode总结
  5. 被多次定义,第一次再次定义
  6. 微信分享连接个别手机、ios转发不显示图片的,缩略图不出来
  7. 龙讯系列视频转换,LT9211,LT8918,功能:lvds转BT656,lvds转mipi(CSI\DSI)RGB转MIPI(DSI\CSI) BT656\601\1120转HDMI1.4\DVI
  8. mp2 解码器kjmp输出32bit
  9. Certbot nginx证书 or not Let‘s Encrypt
  10. 家里Wifi网速突然变慢,一招瞬间提速