antd行点击选中/取消选中

项目使用的是ant-design-vue@2.x,最近测试提了一个优化建议:行点击选中当前记录。接下来记录一下实现:

行点击事件的要点就是自定义行属性(customRow),我们可以两步搞定这个需求(行点击选中/取消选中)。

第一步,定义customLine方法:

import { reactive,} from "vue";

setup() {
  const formData = reactive({
    tableData: [], // 表格数据
    selectedIds: [], // 选中记录的ids
    selectedItems: [], // 选中的记录
  });
  // 自定义行属性
  const customLine = (record) => {
    return {
    // 行点击选中/取消选中
    onClick: () => {
      if (formData.selectedIds && formData.selectedIds.length > 0) {
        let index = -1;
        for (let i = 0; i < formData.selectedIds.length; i++) {
          if (formData.selectedIds[i] === record.id) {
            index = i;
          }
        }
        // 如果当前记录未选中,则选中
        if (index === -1) {
          dataState.selectedRowKeys.push(record.id);
          formData.selectedItems.push(record);
          formData.selectedIds.push(record.id);
        } else {
          // 否则取消选中
          formData.selectedIds.splice(index, 1);
          let keyIndex = dataState.selectedRowKeys.findIndex(item => item === record.id);
          dataState.selectedRowKeys.splice(keyIndex, 1);
          let itemIndex = formData.selectedItems.findIndex(item => item.id === record.id);
          formData.selectedItems.splice(itemIndex, 1);
        }
      } else {
        // 当前选中记录为空,直接选中
        dataState.selectedRowKeys.push(record.id);
        formData.selectedItems.push(record);
        formData.selectedIds.push(record.id);
      }
    }
  };
};
  return {
    formData,
    customLine,
  };
}

第二步,在<a-table>标签中设置:

<a-table
    rowKey="id"
    :columns="columns"
    :pagination="false"
    :loading="loading"
    :data-source="formData.tableData"
    :custom-row="customLine"
    :row-selection="{
    selectedRowKeys: selectedRowKeys,
       onChange: onSelectChange,
    }"
>
</a-table>

补充:row-selection是已有的点击复选框选中的配置

import { toRefs, reactive,} from "vue";

setup() {
    const dataState = reactive({
      selectedRowKeys: [],
    });
    const onSelectChange = (selectedRowKeys, selectedRows) => {
      dataState.selectedRowKeys = selectedRowKeys;
      formData.selectedIds.length = 0;
      formData.selectedItems.length = 0;
      if (selectedRows.length > 0) {
        editBtn.value = false;
      } else {
        editBtn.value = true;
      }
      selectedRows.forEach((item) => {
        formData.selectedItems.push(item);
        formData.selectedIds.push(item.id);
      });
    };
    return {
      ...toRefs(dataState),
    };
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值