elementui表格全选取消和下面联动组件在vue中使用(无反选)

文章展示了如何在HTML中使用Vue.js的el-table组件实现表格的全选和取消全选功能。通过监听selection-change事件和处理checkbox的状态,动态更新选中数据并同步全选按钮的状态。同时,提供了对应的JavaScript代码片段用于处理数据和响应用户操作。
摘要由CSDN通过智能技术生成
html代码

上面全选,小框和下面跟着选中
小框全选,上面和下面全选跟着选中
下面全选选中,上面的和小框一样选中
完整效果图如下
在这里插入图片描述

这里我省略了中间部分,效果图如下

在这里插入图片描述

//上面部分
 <el-table
      ref="multipleTable"
      :data="list"
      style="width: 100%"
      @selection-change="handleSelectionChange"
    >
      <el-table-column
        type="selection"
        width="55"
      >
      <!--写html元素需要用插槽,通过scope.row获取数据-->
     	<template slot-scope="scope">
          ¥ {{ scope.row.priceStr | ax }}
        </template>
      //中间部分略。。。。。。
      </el-table-column>
</el-table>


//下面部分
    <div class="zf">
      <el-checkbox
        v-model="checked"
        @change="smallcheckboc"
        >全选</el-checkbox
      >
      <p>
        总价:<span>{{ total }}</span>
      </p>
      <el-button type="danger">结算</el-button>
    </div>
    {{ flag }}
  </div>
js代码
data(){
 return{
 	  list:[], //存放所有数据的数组
	  tablist: [], //选中的数据存放
      checked: false, //绑定下面复选框的状态
	}
}
methods:{
	//以下所有注释为个人理解,如果有误请勿怪
	//多选后数据变化,(全选按钮的变化,里面的val代表被选中的数据)
    handleSelectionChange(val) {
      //将勾选的数据存储起来,与原数据对比
      this.tablist = val;
      //长度相等,即全部勾选
      if (this.tablist.length == this.list.length) {
        //让下面的全选按钮跟着改变
        this.checked = true;
      } else {
        this.checked = false;
      }
    },
    //全选/取消全选方法
    toggleSelection(rows) {
      if (rows) {
        rows.forEach((row) => {
          this.$refs.multipleTable.toggleRowSelection(row);
        });
      } else {
        this.$refs.multipleTable.clearSelection();
      }
    },
    //下面复选框的改变事件
    smallcheckboc() {
      console.log("this.checked", this.checked);
      if (this.checked) {
        //取消全选
        //先判断已勾选数据的长度(将已勾选保持勾选状态,否则将会取反一次)
        if (this.tablist.length) {
          this.toggleSelection(this.tablist);
        }
        this.toggleSelection(this.list);
      } else {
        //小框勾选状态为非true时,让它反转勾选
        this.toggleSelection();
      }
    },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好,您可以通过以下代码实现ElementUI表格全选当前页和全选所有数据: ```html <template> <el-table :data="tableData" style="width: 100%"> <el-table-column type="selection" :selectable="selectable" /> <el-table-column prop="date" label="日期" width="180" /> <el-table-column prop="name" label="姓名" width="180" /> <el-table-column prop="address" label="地址" /> </el-table> <div style="margin-top: 20px;"> <el-button @click="handleSelectAll(true)">全选当前页</el-button> <el-button @click="handleSelectAll(false)">取消全选</el-button> <el-button @click="handleSelectAll(true, 'all')">全选所有数据</el-button> </div> </template> <script> export default { data() { return { tableData: [ { date: '2020-07-10', name: '张三', address: '北京市' }, { date: '2020-07-11', name: '李四', address: '上海市' }, { date: '2020-07-12', name: '王五', address: '广州市' }, { date: '2020-07-13', name: '赵六', address: '深圳市' } ], selectable: (row, index) => { return index !== 3; // 只有前三行可选 }, selectedRows: [] }; }, methods: { // 全选当前页 handleSelectAll(checked, type = 'page') { if (checked) { const rows = this.$refs.table[state].tableData; const selectedRows = rows.filter(row => row.$selectable !== false); const selection = selectedRows.filter(row => { const isSelected = this.selectedRows.some(item => item === row); return !isSelected; }); this.selectedRows = [...this.selectedRows, ...selection]; } else { this.selectedRows = this.selectedRows.filter(row => row.$selectable !== false); } const selection = this.selectedRows.map(row => row.$index); this.$refs.table[type === 'all' ? 'table' : 'bodyWrapper'] .querySelectorAll('.el-table__body-wrapper > table > tbody > tr') .forEach((row, index) => { const $row = this.$refs.table.$getRow(index); if ($row.$selectable === false) return; if (checked) { if (!this.selectedRows.some(i => i.$index === $row.$index)) { $row.classList.add('selected'); this.selectedRows.push($row); } } else { $row.classList.remove('selected'); const selectionIndex = selection.indexOf(index); if (selectionIndex !== -1) { this.selectedRows.splice(selectionIndex, 1); } } }); } } }; </script> ``` 在这个例子,我们使用了`el-table-column`组件的`type="selection"`属性来给表格加上复选框列,通过`selectable`属性来控制行是否可选。然后,我们在模板添加了三个按钮,分别用来全选当前页、取消全选以及全选所有数据。在`handleSelectAll`方法,我们通过`querySelectorAll`和`$getRow`方法来获取所有行,然后再根据行的`$selectable`值来判断该行是否可选。最后,我们利用`classList`来动态添加或移除`selected`类和记录选的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寂173

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值