el-table 获取选中元素,根据下标删除

需求如题,当我们拿到table数据的时候,对象里是不带有index下标的,所以我们可以使用row-class-name这个属性为每行的对象增加一个index。

页面创建一个table

<template>
    <el-table 
        :data="dataList" 
        :row-class-name="rowDataIndex" 
        @selection-change="handleDataSelectionChange"
    >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column label="编号" align="center" prop="num" />
        <el-table-column label="名称" align="center" prop="name" />
    </el-table>
    <el-button type="danger" icon="el-icon-delete" size="mini"
        @click="handleDeleteData">删除选中行</el-button>
</template>

声明列表数据,选中数据变量

data() {
    return {
      // 列表数据
      dataList: [],
      // 选中数据
      checkedData: [],
    }
}

 定义方法

  1. 给每行增加index参数,值为下标
  2. 选中复选框时,将下标装进checkedData
  3. 过滤checkedData中的下标,更新列表数据
methods: {
    /** 维护序号 */
    rowDataIndex({ row, rowIndex }) {
      // 给每行增加index参数,值为下标
      row.index = rowIndex + 1;
    },
    /** 复选框选中数据 */
    handleDataSelectionChange(selection) {
      // 将下标装进checkedData
      this.checkedData = selection.map(item => item.index)
    },
    /** 删除按钮操作 */
    handleDeleteData() {
      if (this.checkedData.length == 0) {
        this.$modal.msgError("请先选择要删除的数据");
      } else {
        const dataList = this.dataList;
        const checkedData = this.checkedData;
        // 筛选不在checkedData中的下标,更新列表数据
        this.dataList = dataList.filter(function(item) {
          return checkedData.indexOf(item.index) == -1
        });
      }
    },
}

filter()是一个常用的操作,用于把数组的某些元素的筛选,然后返回剩下的元素。和map()类似,filter()也接收一个数组。和map()不同的是,filter()把传入的数组中的集合依次筛选每个符合条件的集合,然后根据返回值是true还是false决定保留还是丢弃该元素。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取父级`el-table`的`data`数据的下标之前,您需要确定要获取哪个父级`el-table`的`data`数据下标。如果您已经确定了父级`el-table`的`data`下标,您可以使用以下方法来获取它: 1. 在子级`el-table`的`row-click`事件中,可以通过`$parent.$attrs.row`访问到父级`el-table`的当前数据。您可以通过遍历父级`el-table`的`data`数组找到该数据的下标。 ```html <template> <div> <el-table :data="parentTableData" @row-click="handleRowClick"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> </el-table> <el-table :data="childTableData" :parent="$attrs.row"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { parentTableData: [ { name: 'Lucy', age: 20 }, { name: 'Jack', age: 30 } ], childTableData: [ { name: 'Tom', age: 25 }, { name: 'Jerry', age: 35 } ] } }, methods: { handleRowClick(row) { const index = this.parentTableData.findIndex(item => item === row) console.log('parent table data index:', index) } } } </script> ``` 2. 如果您无法确定要获取哪个父级`el-table`的`data`下标,您可以在父级`el-table`中通过`$emit`方法触发一个自定义事件,并将当前数据和当前`el-table`的引用作为参数。在子级`el-table`中监听该自定义事件,获取父级`el-table`的引用,从而获取父级`el-table`的`data`下标。 ```html <template> <div> <el-table :data="parentTableData" @row-click="handleRowClick"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> </el-table> <el-table :data="childTableData" ref="childTable"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { parentTableData: [ { name: 'Lucy', age: 20 }, { name: 'Jack', age: 30 } ], childTableData: [ { name: 'Tom', age: 25 }, { name: 'Jerry', age: 35 } ] } }, methods: { handleRowClick(row) { this.$emit('parent-row-click', row, this.$refs.childTable) } } } </script> <template> <div> <el-table :data="childTableData" @parent-row-click="handleParentRowClick"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { childTableData: [ { name: 'Tom', age: 25 }, { name: 'Jerry', age: 35 } ] } }, methods: { handleParentRowClick(row, parentTable) { const index = parentTable.store.states.data.indexOf(row) console.log('parent table data index:', index) } } } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值