el-table 复选框

1 篇文章 0 订阅
1 篇文章 0 订阅

1、简易用法,没有附加的功能

要在表格里使用CheckBox很简单,只需设置type就可以

 

<!-- 在table中添加selection-change的处理函数,回调函数可以拿到选中的数组 -->
<el-table
  :data="tableData2"
  border
  style="width: 100%"
  ref="checkTable"
  @selection-change="handleSelectionChange">
  <!-- 只需在表格里多加一列.设置type="selection"就可以 -->
  <el-table-column
    type="selection"
    width="55">
  </el-table-column>
  .
  .
  .
</el-table>

// method
handleSelectionChange (val) {
  console.log(val)
}

2、切换选中的表格,默认选中表格

使用表格的toggleRowSelection可以切换表格的选中状态,也可以设置表格的默认选中行

<!-- 在table中设置一个ref,就可以使用表格的方法了 -->
<el-table
  :data="tableData2"
  border
  style="width: 100%"
  ref="checkTable"
  @selection-change="handleSelectionChange">
  <el-table-column
    type="selection"
    width="55">
  </el-table-column>
  .
  .
  .
</el-table>

// method
// 处理表格数据,已还款的自动选上
  handleCheckData () {
    let table = this.tableData2 // 从后台获取到的数据
    table.forEach(item => {
      if (item.status === '已还款') {
        // toggleRowSelection可以切换表格行的选中状态,接收两个参数第一个是要切换的行,这里需要的对象格式,
        // 第二个参数是设置选中还是不选中,不传的话会取与原来相反的选择状态
        // 方法调用要等元素挂载才后才能执行,这里加一个判断,这个方法要放在数据获取后
        this.$refs.checkTable && this.$refs.checkTable.toggleRowSelection(item, true)
      }
    })
  }

 

3、设置表格行为不可选

通过selectable参数可以手动设置某些表格行未不可选择

<el-table
  :data="tableData2"
  border
  style="width: 100%"
  ref="checkTable"
  @selection-change="handleSelectionChange">
  <!-- 在type="selection的列里添加selectable参数,通过函数返回true或false可以设置是否可选" -->
  <el-table-column
    type="selection"
    :selectable="handleDisable"
    width="55">
  </el-table-column>
  .
  .
  .
</el-table>

// method
// 处理表格数据,未还款的默认不能勾选
// 有两个参数返回,表格的每一行对象和当前索引
handleDisable(row, index) {
  // 函数需要一个返回值,true为可选,false为不可选择
  if (row.status === '未还款') {
    return false
  } else {
    return true
  }
}

 

 

4、保存数据更新前选中的数据

通过reserve-selection和row-key搭配使用,可以设置保留数据更新前的选中值(分页刷新数据等)

<!-- 在table里设置row-key参数 -->
<el-table
  :data="tableData2"
  border
  style="width: 100%"
  ref="checkTable"
  :row-key="handleReserve"
  @selection-change="handleSelectionChange">
  <!-- 在type="selection的列里添加reserve-selection参数,true为保留数据,默认为false不保留 -->
  <el-table-column
    type="selection"
    reserve-selection
    width="55">
  </el-table-column>
  .
  .
  .
</el-table>

// method
// 表格数据处理,保存上一页选中的数据
// 返回的参数是每一行的值,需要指定表格数据的唯一值,一般是id
handleReserve (row) {
  return row.id
}

 

 

5、其他的一些方法

// 清除选中的数据

this.$refs.checkTable.clearSelection()

 

// 切换所有行的选中状态

this.$refs.checkTable.toggleAllSelection()

 

补充内容:

select的reserve-selection和toggleRowSelection一起用时,比如下面的场景,选择左边表格数据,右边对应展示列表,点击右边的列表也能控制左边的表格选中状态

这种场景会出现一个问题,当你在第一页选中数据,跳转到第二页又选择数据,再跳转回第一页时,删除第一页选中的数据会不能取消选中状态,具体如图

 

 

 

 

一开始的代码是这样的

 <div class="contanier">
      <div class="table-contanier">
        <el-table
          ref="checkTable"
          :data="tableData"
          border
          style="width: 100%"
          row-key="id"
          @selection-change="handleSelectionChange"
        >
          <el-table-column
            type="selection"
            reserve-selection
            width="55"
          />
          <el-table-column
            label="姓名"
            prop="name"
          />
          <el-table-column
            label="年龄"
            prop="age"
          />
          <el-table-column
            label="班级"
            prop="class"
          />
        </el-table>
        <el-pagination
          layout="prev, pager, next"
          :total="30"
          @current-change="changePage"
        />
      </div>
      <ul class="list">
        <li v-for="(item, index) in list" :key="index" class="item">
          {{ item.name }} <el-button type="text" @click="removeName(item)">删除</el-button>
        </li>
      </ul>
    </div>
 methods: {
   // 表格选中
    handleSelectionChange(val) {
      console.log('选中的表格', val)
      this.list = val
    },
    // 删除,取消表格选中
    removeName(item) {
      this.$refs.checkTable && this.$refs.checkTable.toggleRowSelection(item, false)
    }
  }

出现这种问题的原因是因为当你从第二页跳转回第一页,你的tableData是从后台从新获取并赋值的,在当前页取消选中状态时,列表里的item和左边表格tableData里的数据虽然值一样,但是此时他们指向的内存地址不一样.所以,不能再传列表里的item了

解决方法

handleSelectionChange(val) {
      console.log('选中的表格', val)
      this.list = val
    },
    // 删除,取消表格选中
    removeName(item) {
      const arr = this.tableData.filter(sub => { return sub.id === item.id }) // 取消当前表格里的选中状态时,用表格里的数据
      const row = arr.length ? arr[0] : item
      // console.log(item, row)
      this.$refs.checkTable && this.$refs.checkTable.toggleRowSelection(row, false)
    },

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-tableElement UI 中的一个表格组件,而复选框回显是指在 el-table 中使用复选框进行多选操作后,再次打开表格时,已选中的项能够显示为选中状态。 要实现 el-table 复选框回显,可以按照以下步骤进行操作: 1. 在 el-table 的列定义中,添加一个带有 type 属性为 "selection" 的列,用于显示复选框。 2. 在 el-table 的数据源中,为每一条数据添加一个属性,用于表示该项是否被选中。 3. 在 el-table 的模板中,使用 v-model 指令绑定每一行数据的选中状态。 4. 在 el-table 的 mounted 钩子函数中,根据数据源中的选中状态,将已选中的项设置为选中状态。 下面是一个示例代码: ```html <template> <el-table :data="tableData" style="width: 100%"> <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> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20, selected: true }, { name: '李四', age: 25, selected: false }, { name: '王五', age: 30, selected: true }, ], }; }, mounted() { this.tableData.forEach((item) => { if (item.selected) { this.$refs.multipleTable.toggleRowSelection(item, true); } }); }, }; </script> ``` 在上述示例中,tableData 数组中的每一项都添加了一个 selected 属性,用于表示该项是否被选中。在 mounted 钩子函数中,通过遍历 tableData 数组,将 selected 为 true 的项设置为选中状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值