antd 获取table选中行数据_element-ui 组件el-table默认选中行setCurrentRow采坑记

d58eb828fb71a4126b01e010055f2ca3.png

1.背景

选中表格中某一行,高亮显示,table表格数据变化后(删除某几条数据,不包括选中的删除), this.$refs.multipleTable.setCurrentRow(row),选中之前选中的行,可发现总是选中下一条的数据(选中的是2,删除3,4,5后再用this.$refs.multipleTable.setCurrentRow(row)选中2,结果选择的是6),控制台打印的数据是2的数据;

2.尝试

nextTick().setTimeout()都不能解决。明明this.$refs.multipleTable.setCurrentRow(row)传的数据是正确的,可页面就是选择另一行

3.源码

 setRowspanTrHoverState(cell, flag = 'enter') {
      const allRow = this.$el.querySelectorAll('tbody > tr.el-table__row');
      let rowspan = cell.getAttribute('rowspan');
      // 鼠标不再合并的单元格上直接中止
      if (rowspan === null) return;
      // 当前单元格所在行的序号
      let start = [].slice.call(allRow).indexOf(cell.parentNode);
      rowspan = +rowspan;
      // rowspan == 0表示从当前行一直都末尾都合并
      // rowspan == 1无意义,等同于未合并
      if (rowspan > 1 || rowspan === 0) {
        const end = rowspan > 0 ? rowspan + start - 1 : allRow.length - start;
        while (start <= end) {
          flag === 'enter'
            ? addClass(allRow[start], 'hover-row')
            : removeClass(allRow[start], 'hover-row');
          start++;
        }
      }
    },

4.猥琐的结解决方案

 //监听tableData
watch: {
    tableData(val) {
     //this.curRow之前选中的行
      let curIndex = val.findIndex(item => item.id=== this.curRow.id)
      //如果之前选中的行被删除,默认选中第一行
      if (curIndex === -1) {
        this.$nextTick(() => {
          this.$refs.multipleTable.setCurrentRow(val[0])
          this.curRow = val[0]
        })
      } else {
        //如果之前选中的行没有被删除,则选中之前的行
        // 解决处理渲染错误的问题
        this.$nextTick(() => {
          let rows = this.$refs.multipleTable.$el.querySelectorAll('tbody > tr.el-table__row')
          if (rows.length) {
            rows = Array.from(rows)
            rows.forEach(item => item.classList.remove('current-row'))
            rows[curIndex].classList.add('current-row')
          }
        })
      }
    }
  },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值