前端用_.filter做table表格数据的假删除;涉及到scoped.$index

前端用_.filter做table表格数据的假删除;涉及到scoped.$index


前言

在实际的开发中,我们常常会遇到这样一种情况,就是当你新增了一条数据渲染到表格后,还没点保存按钮没有调用到后端保存的接口,这时候我却因为某些原因要把这条数据删除掉,这时候这条数据是没有id的,我们在前端就会涉及到假删除操作。


一、假删除实现

1.表格渲染代码

下面的代码是表格数据,绑定一个tableData数据,其中在操作栏有个删除按钮,按钮中有个delete(scoped.$index, scoped.row.id)方法
其中用到的scoped.$index,该属性用于记录选中的那行表格数据在这一页数据中的下标

<div>
   <el-table :data="tableData">
      <el-table-column prop="userId"  label="用户ID" width="140" />
      <el-table-column prop="userName" label="用户名" width="140" />
      <el-table-column prop="userEmail" label="用户邮箱" width="140" />
      <el-table-column prop="" label="操作" width="200">
          <template #default="scoped">
            <el-button
              style="margin-left: 12px"
              type="danger"
              link
              @click="delete(scoped.$index, scoped.row.id)"
            >
              <i class="iconfont icon-bastrash"></i>删除
            </el-button>
          </template>
        </el-table-column>
   </el-table>
</div>

2.删除方法实现

代码如下(示例):

function delete(index: number, id: string) {
  if (id) {
    proxy.$msgbox
      .confirm('是否删除此条数据?'), {
        confirmButtonText: '确认删除',
        cancelButtonText: '取消',
        type: 'error'
      })
      .then(() => {
      //如果存在id,说明是已经保存好,存在数据库的了,这种情况直接调用后端的删除接口
        deleteUserInfo(id).then((res) => {
          if (res.code === 200) {
            proxy.$message.success('删除成功!')
            getDetail()
          } else {
            proxy.$message.error('删除失败!')
          }
        })
      })
  } else {
  //如果不存在id,那么就用_filter函数做假删除
    const list = _.filter(tableData, (o, i) => i !== index)
    tableData.length = 0
    tableData.push(...list)
  }
}

我们先来看看_filter这个函数,.filter(collection, [predicate=.identity])
①collection (Array|Object): 一个用来迭代的集合
②[predicate=_.identity] (Array|Function|Object|string): 每次迭代调用的函数
③predicate(断言函数)调用三个参数:(value, index|key, collection)
其中可以看出const list = _.filter(tableData, (o, i) => i !== index)的i就是索引,o就是value
其实假删除的逻辑原理就是:判断tableData所有数据的下标(i)和选中的那行数据在这一页表格中的下标(scoped.index),通过比较会发现当只有一条数据的时候它们下标都一样,过滤出来的list是空的,再重新把空的数据push给tableData,实现删除目的;当有多条数据的时候也一样,把tableData数据下标(i)和选中那行数据的下标(scoped.$index)不一样的数据过滤出来,实现点击删除按钮就删除当前数据

假设只有一条数据,在这里再打印一下数据:

const list = _.filter(tableData, (o, i) => {
      console.log('value', o)
      console.log('index', i)
      console.log('scoped.$index', index)
    })

显示结果如下图所示
在这里插入图片描述
假设列表有三条数据,删除列表第三条数据,结果显示如下
在这里插入图片描述


总结

以上就是关于前端用_.filter比较下标做假删除的总结记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值