基于若依前后端分离的el-table设置

本文介绍了如何在Vue应用中使用ElementUI的el-table实现列宽自适应,包括使用`auto-resize`属性、`flexColumnWidth`函数以及列排序和固定功能的实现方法。作者分享了个人在调整列宽上的经验及解决策略。
摘要由CSDN通过智能技术生成

  列宽自适应:自适应最长的标题或内容

借鉴他人,亲测有效!

border 添加表格边框

resizable 属性设置为 true 列宽可调整;表格的每一列都可以通过拖动列头分隔条来调整宽度。

auto-resize="true"用于控制表格的列宽是否自动调整以适应内容。如果将 auto-resize 属性设置为 true,则表格的列宽将根据内容自动调整,以确保所有内容都能完全显示。但我自己使用不是很管用,不知道那里的问题。后来在el-table-column 中使用了:width="flexColumnWidth('标题名称','Name')"就很nice
<el-table v-loading="loading" 
:data="infoList" 
ref="tableRef" 
@selection-change="handleSelectionChange" 
border resizable  
auto-resize="true" 
 >
<el-table-column 
label="标题名称"
align="center" 
prop="Name"                
:width="flexColumnWidth('标题名称','Name')"/>
</el-table>

 

//遍历列的所有内容,获取最宽一列的宽度
getMaxLength (arr) {
  return arr.reduce((acc, item) => {
    if (item) {
      const calcLen = this.getTextWidth(item)
      if (acc < calcLen) {
        acc = calcLen
      }
    }
    return acc
  }, 0)
},

getTextWidth (str) {
  let width = 0
  const html = document.createElement('span')
  html.innerText = str
  html.className = 'getTextWidth'
  document.querySelector('body').appendChild(html)
  width = document.querySelector('.getTextWidth').offsetWidth
  document.querySelector('.getTextWidth').remove()
  return width
},
/**
 * el-table-column 自适应列宽
 * @param prop_label: 表名
 * @param table_data: 表格数据
 */
flexColumnWidth (label, prop) {
// 1.获取该列的所有数据
  const arr = this.infoList.map(x => x[prop])
// 把每列的表头也加进去算
  arr.push(label) 
// 2.计算每列内容最大的宽度 + 表格的内间距(依据实际情况而定)
  return (this.getMaxLength(arr) + 40) + 'px'
}

   列排序:每列的标题右面可以逆序/顺序排序

在el-table-column标签中加入sortable即可

<el-table-column label="主键id" align="center" prop="articleId" 
fixed
sortable
:width="flexColumnWidth('主键id','articleId')"/>

 列固定:左右滑动,列固定

在el-table-column标签中加入fixed即可

<el-table-column label="主键id" align="center" prop="articleId"  
fixed
:width="flexColumnWidth('主键id','articleId')"/>

参考:

【vue】ElementUI el-table自适应列宽实现_el-table 宽度自适应-CSDN博客

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现全选删除的功能,可以按照以下步骤进行: 1. 在表格的表头中添加一个复选框,用于全选/取消全选。 2. 在 el-table 的 data 中添加一个数组,用于存储当前表格中选中的行的数据。 3. 在 el-table 的 row-selection-change 事件中,将选中的行数据添加到上述数组中。 4. 在全选/取消全选的复选框的 change 事件中,通过 el-table 的 toggleAllSelection 方法来实现全选/取消全选。 5. 在删除按钮的 click 事件中,遍历选中的行数据数组,将对应的行从表格数据中删除。 以下是示例代码: ```html <template> <el-table :data="tableData" @row-selection-change="handleSelectionChange" ref="table"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> <div class="button"> <el-checkbox v-model="isAllSelected" @change="handleAllSelectionChange">全选</el-checkbox> <el-button type="danger" @click="handleDelete">删除</el-button> </div> </template> <script> export default { data() { return { tableData: [ { id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 25 }, { id: 3, name: '王五', age: 30 } ], selectedRows: [], // 存储选中的行数据 isAllSelected: false // 是否全选 } }, methods: { handleSelectionChange(selection) { this.selectedRows = selection }, handleAllSelectionChange(value) { this.$refs.table.toggleAllSelection() this.selectedRows = value ? this.tableData : [] }, handleDelete() { this.selectedRows.forEach(row => { const index = this.tableData.indexOf(row) this.tableData.splice(index, 1) }) this.selectedRows = [] this.isAllSelected = false } } } </script> ``` 以上代码中,el-checkbox 和 el-button 为 Element UI 的组件,需要在代码中引入对应的组件库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值