一个比官网更好的el-table 实现跨行展示的例子

这篇具有很好参考价值的文章主要介绍了一个比官网更好的el-table 实现跨行展示的例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

el-table 实现跨行展示的例子,好吧,这个问题好像挺容易的,官网文档就有例子,用的是span-method,不过官网给的例子其实实现起来有时候并不容易,而且也不是很灵活,这里给出一种比官网更好的实现方式。以跨行为例,跨列其实是类似的。

效果如图

一个比官网更好的el-table 实现跨行展示的例子,vue.js,elementui,javascript

1、使用的还是官方的span-method,这里以返回对象的方式为例,相比于官网我们在el-table-column 加了 :class-name="crossTag",作为对应列是否需要跨行的标识,后面用于span-method判断。比官网用列数去判断更灵活,官网用数字进行判断,如果有增减,这个判断数字就需要重新调整,由于没有相关参数可传,这里取巧用了class-name。

<el-table :data="tableData2" border :span-method="objectSpanMethod">
      <el-table-column type="selection" width="55" :class-name="crossTag" />
      <el-table-column prop="id" label="采购需求单"  :class-name="crossTag" />
      <el-table-column prop="name" label="需求来源"  :class-name="crossTag" />
      <el-table-column prop="amount1" label="采购仓"  />
      <el-table-column prop="amount2" label="状态" />
      <el-table-column :class-name="crossTag" label="操作">
        <template #default>
          <el-button @click="handleSave" link type="primary" size="small">编辑</el-button>
        </template>
      </el-table-column>
</el-table>

2、js相关处理,代码如下,关键部分已通过注释部分的说明文章来源地址https://www.toymoban.com/news/detail-802136.html

// 假设后端返回数组,这种跨行的方式,后端大概率会以这种方式返回,你会发现el-table无法显示对应的值,所以需要对其展开成一维数组。
const tableData1 = [
  {
    id: '12987122',
    name: 'Tom',
    children: [
      { amount1: '111', amount2: '3.2' },
      { amount1: '222', amount2: '3.3' },
    ],
  },
  {
    id: '12987124',
    name: 'Tom',
    children: [{ amount1: '3333', amount2: '4444' }],
  },
]

// 展开二维数组,方便el-table显示,同时设置对应行的rowspan,colspan
function formatData(aData) {
  const newList: any[] = []
  aData.forEach((item: any) => {
    const { list } = item

    if (list && list.length) {
      const length = list.length
      const requiredNum = list.reduce((total, item) => {
        return total + Number(item.purchaseQuantity)
      }, 0)
      // 遍历展开成一维数组  
      list.forEach((childItem, index) => {
        const newItem = index
          ? { ...childItem, ...item, rowspan: 0, colspan: 0 }  // 需要隐藏的
          : { ...childItem, ...item, requiredNum, rowspan: length, colspan: 1 } // 通过在对应行数据中添加额外的rowspan,colspan,用于设置跨多少行,这种实现起来不会那么抽象,比较容易想到。
      
        delete newItem.list
        newList.push(newItem)
      })
    } else {
      // 按原样显示的
      const newItem = { ...item, rowspan: 1, colspan: 1 }
      delete newItem.list
      newList.push(newItem)
    }
  })
  return newList
}

// 当然多了两次遍历,性能稍微有所损耗,但一般不碍事。
const tableData2 = formatData(tableData1)


// 处理行合并
const objectSpanMethod = ({ row, column }) => {
  // 判断哪些列需要做跨行处理
  if (column.className && column.className.includes(crossTag)) {
    // 直接从行数据中拿到rowspan, colspan 
    const { rowspan, colspan } = row
    return {
      rowspan,
      colspan,
    }
  }
}

到了这里,关于一个比官网更好的el-table 实现跨行展示的例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-table实现懒加载(el-table-infinite-scroll)

    2023.8.15今天我学习了用el-table对大量的数据进行懒加载。 效果如下:   1.首先安装:   2.全局引入: 3.页面使用: 如果大家有不懂的地方可以参考: 1.vue—在el-table上实现懒加载效果_列表懒加载插件_迷路小灰灰的博客-CSDN博客 2.el-table-infinite-scroll - npm (npmjs.com) 

    2024年02月12日
    浏览(50)
  • el-table实现指定列合并

    table 传入 span-method 方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行 row 、当前列 column 、当前行号 rowIndex 、当前列号 columnIndex 四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表 rowspan ,第二个元素代表 colspan 。 也可以返回一个键名为

    2024年02月13日
    浏览(36)
  • 给el-table实现列显隐

    在ElTable基础上添加列隐藏,在使用el-table 时候,想要实现这种效果一般是给每个el-form-item添加v-if 判断的,看看el-table中看有没有什么办法能使用更方便的方式去管理,最后发现内部的【插入】和【删除】两个方法可以达到我们要的效果。 具体效果如下 业务组件定义好数据,

    2024年02月15日
    浏览(45)
  • el-table实现嵌套表格的展示

    需求 一个表单中存在子表 列表返回格式 实现 实现思路 el-table中在嵌套一个el-table,这样数据格式就没问题了,主要就是样式 将共同的列放到一列中,通过渲染自定义表头 render-header ,将表头按照合适的宽度渲染出来 根据数据渲染表头 调样式,慢慢调到合适就行 完整代码

    2024年02月21日
    浏览(46)
  • el-table如何实现自动滚动效果

    需求:表格自动向上滚动,要有一个停顿的效果。 效果图如下:  实现过程:获取当前表格挂载后的真实DOM,并且获取到表格中承载数据的div元素,拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果。 具体代码如下:

    2024年02月12日
    浏览(56)
  • vue el-table实现动态表头

    众所周知,element-ui中有一个表格组件el-table,用于展示多条结构类似的数据。之前遇到过一个需求,要手动控制el-table的表头显示。就是假如table表格一共有10列数据,可以通过设置勾选,决定显示多少列。 为了代码的复用性,将配置页面单独抽成了组件,所以代码中会有组件

    2024年02月12日
    浏览(53)
  • el-table表格实现自动滚动效果

    table页面的内容如果超出设定的height会出现自动无限滚动的效果,如下所示: 先给el-table一个ref属性 然后获取到这个属性 在mounted阶段执行scrollFun函数,通过setTnterval定时器来实现动态滚动效果,代码如下: 如果出现列表字段过长时,可使用tooltip-effect=“dark” 搭配 show-overf

    2024年02月13日
    浏览(41)
  • element-ui 表格el-table高度不是一个固定值时固定表头

    elementui中为表格组件提供了height属性实现固定表头 height可以为数字或者字符串,当为一个数字时表示固定的高度,也可以为百分比等字符串。 当height不是一个固定值时,如期望表格可以填充完页面剩余空间,并且固定表头时,可以通过给height属性赋值字符串形式实现。以页

    2024年01月25日
    浏览(72)
  • vue+el-table实现展开与折叠

    本文会提到两种实现方法,之前我使用的是第一种,后来加了固定列,发现展开与折叠失效,故而出现了第二种方法。 一、通过class名称获取节点,并对节点进行操作(该方法表格添加固定列会失效) 1.全部展开 2.全部折叠 二、通过el-table中的 toggleRowSelection方法来实现展开与

    2024年02月14日
    浏览(47)
  • el-table自适应列宽实现

    动态计算 效果图:

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包