@selection-change取消选中

该博客展示了如何在Element-UI的表格组件中切换行的选中状态。通过`toggleSelection`方法和`clearSelection`,可以实现选择特定行或者取消所有选择。示例代码中,提供了切换第二、第三行选中状态的实现,常用于数据提交后的状态更新操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看element-ui的示例代码

<template>部分

<template>
  <el-table
    ref="multipleTable"
    :data="tableData"
    tooltip-effect="dark"
    style="width: 100%"
    @selection-change="handleSelectionChange">
    <el-table-column
      type="selection"
      width="55">
    </el-table-column>
    <el-table-column
      label="日期"
      width="120">
      <template slot-scope="scope">{{ scope.row.date }}</template>
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="120">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址"
      show-overflow-tooltip>
    </el-table-column>
  </el-table>
  <div style="margin-top: 20px">
    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
    <el-button @click="toggleSelection()">取消选择</el-button>
  </div>
</template>

<script>部分

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-08',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-06',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-07',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        multipleSelection: []
      }
    },

    methods: {
      toggleSelection(rows) {
        if (rows) {
          rows.forEach(row => {
            this.$refs.multipleTable.toggleRowSelection(row);
          });
        } else {
          this.$refs.multipleTable.clearSelection();
        }
      },
      handleSelectionChange(val) {
        this.multipleSelection = val;
      }
    }
  }
</script>

切换第二行第三行的选中状态就是我们需要的示例,把对应部分的代码换成这样

 <el-button @click="toggleSelection()">切换第二、第三行的选中状态</el-button>
toggleSelection(rows) {
	   this.$refs.multipleTable.clearSelection();
	},

这样就可以切换选中的状态了,一般可以用于提交数据之后调用这个方法。当然,按钮部分可以不要。

在这个例子中,您希望点击“全选”按钮时选择表格中的所有行。Element UI 的 `<el-table>` 组件提供了一个内置方法 `toggleRowSelection(row, selected)` 来手动控制某一行的选择状态。 以下是实现全选功能的具体步骤: --- ### 修改代码并添加逻辑 我们需要对现有的 Vue 实现做以下修改: 1. **绑定一个属性来记录当前的所有选项**:通常我们会使用一个数组变量存储用户勾选的状态。 2. **编写 `handleSelectAll` 方法**:该方法用于切换每一行的选中状态。 3. **调用 Element Table 提供的 API**:通过 `this.$refs.table.toggleAllSelection()` 或逐行设置 `row.isSelected = true` 完成全选效果。 下面是完整的示例代码: --- ```vue <template> <div> <!-- 全选按钮 --> <el-row> <el-button @click="handleSelectAll(true)">全选</el-button> <el-button @click="handleSelectAll(false)">取消全选</el-button> </el-row> <!-- 表格组件 --> <el-table ref="tableRef" <!-- 添加引用以便操作 DOM 节点 --> v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @selection-change="handleSelectionChange"> <!-- 勾选列 --> <el-table-column type="selection" width="55"/> <!-- 设备号列 --> <el-table-column label="设备号" align="center" prop="deviceId" /> <!-- 备注列 --> <el-table-column label="备注" align="center" prop="note" /> </el-table> </div> </template> <script> export default { data() { return { loading: false, // 控制加载动画 list: [ // 示例数据 { deviceId: 'dev001', note: '这是第一个设备' }, { deviceId: 'dev002', note: '这是第二个设备' } ], multipleSelection: [] // 存储已选择的项 }; }, methods: { /** * 切换全部选中状态 */ handleSelectAll(selected) { this.$refs.tableRef.clearSelection(); // 清空原有选择 if (selected) { // 如果需要全选,则遍历每一行设为选中 this.list.forEach((row) => { this.$refs.tableRef.toggleRowSelection(row, true); }); } }, /** * 监听复选框变化事件 */ handleSelectionChange(selection) { console.log('当前选中:', selection); // 打印最新选定的结果 this.multipleSelection = selection; // 更新到本地 state 中 } } }; </script> ``` --- ### 关键点说明 1. **给 el-table 设置 `ref="tableRef"` 属性** - 使用 `$refs` 访问实例对象,便于直接调用内部提供的方法如 `clearSelection`, `toggleRowSelection`. 2. **全选逻辑的核心方法** ```javascript toggleRowSelection(row, true/false): 可以显式指定某一行是否被选中; clearSelection(): 移除所有的高亮标记恢复初始未勾选状态。 ``` 3. **监听多选框变动** 我们还需要捕获用户的动态交互(例如手动作业单个单元格),所以绑定了回调函数 `@selection-change=...` 将最终结果同步至父级作用域下的集合变量之中。 4. **双向联动体验增强建议** 若进一步追求完美的用户体验,在页面初始化渲染完成之后默认加载某些固定预览内容的话也可以主动触发一次全局范围内的 setCheckedRows 操作达成类似的效果! --- ### 性能优化小贴士 对于大数据量列表展示场景来说频繁触发动画可能会导致卡顿现象发生因此实际应用过程中还需合理权衡两者之间的平衡比如分页机制等手段降低压力提高流畅度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值