vue2表格分页并且每行有复选框,如何实现所有页面全选复选框被选中回显

13 篇文章 0 订阅
7 篇文章 0 订阅

一、如何实现表格的列有复选框,并且表头复选框后有文字

在这里插入图片描述

  • 给表格每行加复选框,在需要加复选框的列上加type="selection"
<el-row :gutter="10" class="mb8">
	<el-col :span="1.5">
		<el-button type="primary" plain icon="el-icon-upload2” size="mini" @click="exportSelectedExcel">导出</el-button>
		<el-checkbox -model="al1Check” @change="al1CheckEvent”style="margin-left:10px;">全选所有</el-checkbox》
	</el-col>
	<right-toolbar :showSearch.sync="showSearch" @queryTable="getPagelist"></right-toolbar>
</el-row>
<el-checkbox v-model="allCheck" @change="allCheckEvent">全选所有</el-checkbox>
 <el-table
    ref="table"
    :data="tableData"
    tooltip-effect="dark"
   :row-key="rowKey"
    @selection-change="handleSelectionChange">
    <el-table-column
     type="selection" 
     :reserve-selection="true"
     :selectable="checkSelectable"
     width="55"></el-table-column>
    <el-table-column  label="机构" width="120"> </el-table-column>
   ...
  </el-table>
  ...
  
  • 想在表头复选框后加文字,用css就可以实现
::v-deep .el-table__header-wrapper .el-checkbox__input::after{
	content:全选;
	position: absolute;
	margin-left: 5px;
}

二、点击全选所有,分页的都要回显被选中

给el-table加@selection-change="handleSelectionChange",给有复选框的那一列加:reserve-selection="true" :selectable="checkSelectable"
方法如下:

export default {
  data () {
    return {
   	  tableData:[]
      idList: [],//所有选中的数据包含跨分页数据
      allCheck: false,
      rowKey(row) {
      	//唯一字段名称
      	return row.id
      }
    }
  },
  created(){
     //获取初始表格数据
  },
  methods: {
	  ...
   	 // 分页全选-选中框改变事件
    handleSelectionChange (val) {
      // 数据去重
      this.idList = this.reduceSame(val);
      // 选中所有选择框时勾选全选按钮
      if (this.idList.length == this.total) {
        this.allCheck = true;
      }
      // 将row是对象数组数据转换为字符串
      this.idList= this.idList.map(function (val) {
        return val.id;
      });
      // 选中后的数据,将选中的id放在一个数组传给后端
      console.log(this.idList)
    },
	// 数组对象去重
    reduceSame: function (arr) {
      let obj = {};
      return arr.reduce(function (prev, item) {
        obj[item.id] ? "" : (obj[item.id] = 1 && prev.push(item))
        return prev
          ;
      }, []);
    },
 	// 分页全选-全选按钮change事件
    allCheckEvent () {
      let _this = this;
      if (_this.allCheck) {
        // 全选选中时当前页所有数据选中
        _this.lists.forEach(row => {
          if (row) {
            _this.$refs.table.toggleRowSelection(row, true);
          }
        });
      } else {
        _this.$refs.table.clearSelection();
      }
    },
 	// 分页全选-全选时禁用选择框
    checkSelectable (row, index) {
      return !this.allCheck;
    },
   },
  watch: {
    // 分页全选-监听数据变化
    tableData: {
      handler (value) {
        if (this.allCheck) {
          this.tableData.forEach(row => {
            if (row) {
              this.$refs.table.toggleRowSelection(row, true)
            }
          });
        }
      },
      deep: true
    }
  },
  
 }
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Ant Design Vue2 表格中,可以通过设置 `row-selection` 属性来为表格添加复选框。如果需要为复选框全选处添加文字,可以在 `row-selection` 属性中设置 `checkStrictly` 和 `renderCell` 两个属性。具体做法如下: 1. 在 Table 组件中设置 `row-selection` 属性,其中 `checkStrictly` 属性用于控制是否严格检查复选框选中状态,`renderCell` 属性用于渲染复选框列,并在全选处添加文字。 ``` <template> <a-table :columns="columns" :data-source="data" row-selection="{checkStrictly: true, renderCell: renderSelection}"> </a-table> </template> ``` 2. 在 `methods` 中定义 `renderSelection` 方法,用于渲染复选框列和全选处文字。在 `renderSelection` 方法中,先根据 `record` 和 `index` 判断当前行是否可选,然后根据 `record` 的 `selected` 属性确定复选框选中状态,最后在全选处添加文字。 ``` <script> export default { data() { return { columns: [ { title: '', dataIndex: 'checkbox', width: '50px' }, { title: 'Name', dataIndex: 'name', key: 'name' }, { title: 'Age', dataIndex: 'age', key: 'age' } ], data: [ { id: '1', name: 'John Brown', age: 32, selected: false }, { id: '2', name: 'Jim Green', age: 42, selected: false }, { id: '3', name: 'Joe Black', age: 32, selected: false } ] }; }, methods: { renderSelection(h, { record, index }) { const selectable = !record.disabled; const selected = record.selected; return ( <div class="selection-cell"> <a-checkbox value={record.id} disabled={!selectable} checked={selected} on-change={(e) => this.handleSelectionChange(e, record)} ></a-checkbox> {index === 0 && ( <span class="selection-all"> {this.isAllSelected() ? '取消全选' : '全选'} </span> )} </div> ); }, isAllSelected() { return this.data.every((item) => item.selected); }, handleSelectionChange(e, record) { record.selected = e.target.checked; } } }; </script> <style scoped> .selection-cell { display: flex; align-items: center; } .selection-all { margin-left: 10px; color: #1890ff; cursor: pointer; } </style> ``` 这样就可以为表格复选框全选处添加文字了。需要注意的是,如果需要获取选中的行,可以通过 `this.data.filter(item => item.selected)` 来获取。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值