el-table selectable,el table

  el-table selectable,el table

  我们将经常使用桌子。如果数据量很大,我们可以直接分页。如果有多个表,如何优化?有兴趣的可以了解一下。

  

目录

  前言解决思想具体实现需要满足的必要条件问题。

  

前言

  我们将经常使用桌子。如果数据量很大,我们可以直接分页,但是不可避免的会出现一些情况,一个页面需要显示很多项,或者不需要分页。

  这时候如果纯显示更好,如果在列表中加入editable,就会卡死。点击一个下拉框,要过很久才会弹出下拉框。这将极大地影响用户的使用。

  

解决思路

  首先我考虑了页面是否会因为数据加载慢而卡死,所以我采用了滚动加载的方法。先拿到数据后,我先加载了100条数据。滚动的时候加载到页面中,这样批量加载会减少第一次数据太多的压力。起初,没有任何问题。当后面的数据越来越多的时候,点击表格中可编辑的下拉框,你会明显感觉到页面发生了变化。

  后面的想法是,如果我只加载页面可见区域的数据,那么应该可以解决页面堵塞的问题。

  

具体实现

  加载开始,获取10/20条数据(这个可以用每行的高度/页面上显示数据的高度来计算,或者一个固定值)。滚动时监控滚动条,根据滚动距离计算页面上显示的数据。

  

需要满足的必备条件

  列表的总高度

  数据总长度每行高度

  如果只显示页面的高度,则不能滚动新数据。

  每行的高度

  如果是固定高度,可以写死值。

  如果它是一个动态高度,可以通过下式计算

  滚动的偏移量

  当前滚动距离-(当前滚动距离%每行高度)

  页面上显示的数据的开始索引和结束索引。

  索引从0开始。

  在滚动过程中,起始索引=Math.floor(当前滚动距离/每行高度)

  代码步骤

  div class=main-inner-content

  El-table:data= visible data :style= { min-height :grading editor?list height“px”:“100%”}“id=“dataTable”

  /el-table

  /div

  计算值:{

  ////列表的总高度

  listHeight () {

  //tableData是接口的总数据。

  返回this . table data . length * this . itemsize;

  },

  ////对应于偏移量的样式

  getTransform () {

  返回` translate3d(0,${this.startOffset}px,0)`;

  },

  //获取真实的显示列表数据

  visibleData () {

  let table body=document . query selector( # dataTable。El-table _ _ body-wrapper’)

  if(表体){

  table body . style . transform=this . get transform

  }

  返回this . tabledata . slice(this . start,Math.min(this.end,this . tabledata . length));

  }

  },

  data() {

  返回{

  表数据:[],

  //偏移量

  起始偏移量:0,

  //开始索引

  开始:0,

  //结束索引

  end: null,

  };

  },

  方法:{

  handleScroll () {

  //这是滚动框。如果滚动位置是table的话,在这里改一下就好了,还有一个分配偏移量的地方。

  let scroll top=document . getelementbyid( main-inner-content )。scrollTop

  ////此时的起始索引

  this . start=math . floor(scroll top/this . itemsize);

  if(this . start 0)this . start=0;

  ////此时的结束索引

  this . end=this . start 10;

  ////此时的偏移量

  this . start offset=scroll top-(scroll top % this . itemsize);

  this . start offset=this . start offset this . itemsize?this . start offset-this . itemsize:0;

  }

  },

  已安装(){

  window . addevent listener( scroll ,this.handleScroll,true);

  },

  销毁(){

  window . removeeventlistener( scroll ,this.handle scroll,true)//清除滚动条的滚动事件。

  }

  当页面滚动时,总是只加载十条数据。

  页面显示由偏移量决定。

  

问题

  我设置了整个el表的总高度,然后设置了下面列表项的框的偏移量。如果页面需要在不刷新的情况下检索数据(如分页),则必须初始化数据,否则页面会直接显示之前的数据,否则页面会是空白的。

  document . query selector( # main-inner-content )。scrollTop=0

  this.start=0

  this.startOffset=0

  this . end=this . start 10;

  let table body=document . query selector( # dataTable。El-table _ _ body-wrapper’)

  table body . style . transform=this . get transform

  为了方便计算和使用,页面每行的高度是固定的,不可省略。但是部署预发布环境后,我会发现code-WebKit-box-orientation:vertical没有显示。

  解决方法:写inline style style=-WebKit-box-orientation:vertical 就这样。省略-文本{

  自动换行:断字;

  溢出:隐藏;

  文本溢出:省略号;

  显示:-WebKit-box;

  -webkit-box-orient:垂直;

  -WebKit-line-clamp:2;

  }

  涉及

  https://juejin.cn/post/6844903982742110216#heading-4

  https://codesandbox.io/s/virtuallist-1-forked-sd2xn?file=/src/components/virtual list . vue:1487-1652

  关于使用虚拟列表优化el-table中的表的文章到此结束。有关优化el-table中的表格的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: