VUE多选删除列表遇到的坑

基于Vant的移动端多选组件封装实战:从单选到多选的进阶之路 本文详细介绍了基于Vant组件库封装移动端多选组件的实战过程。针对Vant原生组件仅支持单选的局限,文章从真实业务需求出发,逐步讲解了如何设计交互流程、实现搜索筛选、全选反选、标签展示等核心功能,并提供了完整的代码示例与深度优化方案,帮助开发者高效构建复用性强、体验一致的多选功能组件。 阅读详情

页面效果

在这里插入图片描述

数据结构

        list: [{
          name: '名称1',
          indexs: [{
            tag: '标签1'
          },{
            tag: '标签2'
          },{
            tag: '标签3'
          },{
            tag: '标签4'
          }]
        },{
          name: '名称2',
          indexs: [{
            tag: '标签11'
          },{
            tag: '标签22'
          },{
            tag: '标签33'
          },{
            tag: '标签44'
          },{
            tag: '标签55'
          },{
            tag: '标签66'
          }]
        },{
          name: '名称3',
          indexs: [{
            tag: '标签111'
          },{
            tag: '标签222'
          }]
        },{
          name: '名称4',
          indexs: [{
            tag: '标签1111'
          },{
            tag: '标签2222'
          },{
            tag: '标签3333'
          }]
        },{
          name: '名称5',
          indexs: [{
            tag: '标签1'
          }]
        }]

实现功能

右侧多选框选中后批量删除,无接口对接本地实现,

遇到问题

一开始一直想的是foreach循环如果选中就删除,使用的foreach+splice(),然后遇到如下问题,选中四个只删除了两个(当时脑子不知道咋想的。。。)
在这里插入图片描述

// 最开始写的删除方法
      deleteBtn() {
        this.list.forEach((i) =>{
          i.indexs.forEach((c,cIndex) =>{
            if(c.checked == true) {
              console.log(c.checked);
              i.indexs.splice(cIndex,1)
            }
          });
        });
       }

解决办法

        this.list.forEach((i) =>{
          // 删除选中对象
          i.indexs = i.indexs.filter(item => {
            return !item.checked
          });
        });
        // 该名称下标签为空删除名称
        this.list = this.list.filter(item2 => {
          return item2.indexs.length > 0;
        });

页面全部代码如下

<template>
  <div style="width: 50%;margin: 0 auto">
    <div align="right">
      <button @click="deleteBtn()">删除指标</button>
    </div>
    <ul class="bq-title">
      <li>名称</li>
      <li>标签</li>
    </ul>
    <ul class="bq-con" v-for="(item,index) in list" :key="index">
      <li :style="{lineHeight:`${30*item.indexs.length}px`}">
        <span>{{item.name}}</span>
      </li>
      <li>
        <div v-for="(iItem,iIndex) in item.indexs" :key="iIndex">
          <span class="mb-5" :title="iItem.tag">{{iItem.tag}}</span>
          <el-checkbox v-model="iItem.checked" class="checkbox" ref="checkbox"></el-checkbox>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
  export default {
    name: 'home',
    data() {
      return {
        list: [{
          name: '名称1',
          indexs: [{
            tag: '标签1'
          },{
            tag: '标签2'
          },{
            tag: '标签3'
          },{
            tag: '标签4'
          }]
        },{
          name: '名称2',
          indexs: [{
            tag: '标签11'
          },{
            tag: '标签22'
          },{
            tag: '标签33'
          },{
            tag: '标签44'
          },{
            tag: '标签55'
          },{
            tag: '标签66'
          }]
        },{
          name: '名称3',
          indexs: [{
            tag: '标签111'
          },{
            tag: '标签222'
          }]
        },{
          name: '名称4',
          indexs: [{
            tag: '标签1111'
          },{
            tag: '标签2222'
          },{
            tag: '标签3333'
          }]
        },{
          name: '名称5',
          indexs: [{
            tag: '标签1'
          }]
        }]
      }
    },
    methods:{
      deleteBtn() {
        // 最开始的写法
        // this.list.forEach((i) =>{
        //   i.indexs.forEach((c,cIndex) =>{
        //     if(c.checked == true) {
        //       i.indexs.splice(cIndex,1)
        //     }
        //   });
        // });
        this.list.forEach((i) =>{
          // 删除选中对象
          i.indexs = i.indexs.filter(item => {
            return !item.checked
          });
        });
        // 该名称下标签为空删除名称
        this.list = this.list.filter(item2 => {
          return item2.indexs.length > 0;
        });
        // 取消多选框选中
        this.$refs.checkbox.forEach((i) =>{
          if(i.model == true) {
            i.model =false;
          }
        })
      },
    },
  }
</script>
<style lang="less" scoped>
button{
  background: red;
  color: white;
  border: none;
  padding: 10px 30px;
  border-radius: 10px;
  margin-bottom: 20px;
}
  .bq-title {
    overflow: hidden;
    background: #849f9c;
    height: 30px;
    line-height: 30px;
    color: white;
  li{
    float: left;
    width: 45%;
    text-align: center;
  }
  }
  .bq-con{
    background: #eff9f8;
    border-radius: 5px;
    padding: 5px;
    margin-top: 15px;
    overflow: hidden;
    .checkbox{
      margin-left: 3px;
    }
    li{
      float: left;
      width: 45%;
      text-align: center;
      div{
        height: 28px;
        margin: 0 auto 5px auto;
      }
      span{
        font-size: 14px;
        border-radius: 5px;
        height: 28px;
        line-height: 28px;
        width: 80%;
        background: #c5dad8;
        display: inline-block;
      }
      .mb-5{
        margin: 0 auto 5px auto;
      }
    }
  }
</style>

el-tree和el-table多选实现人员多选,并做回显,在回显区删除人员,表格同时取消选中状态 el-tree和el-table多选实现人员多选,并做回显,在回显区删除人员,表格同时取消选中状态 1、左树又表,左边树节点切换,table显示节点下对应的人员,并做分页显示 2、下方回显区显示已经勾选的人员,不受树节点切换和页码切换影响 3、回显区人员删除,对应树节点下的表格中人员选中状态改为非选中 效果如下图 大体思路 1、把回显区删除的数据进行存储 2、然后tableData更新以后就查找... 阅读详情

相关推荐

复选框选中表格中的行进行删除行操作

复选框选中表格中的行进行删除行操作 复选框选中表格中的行进行删除行操作 复选框选中表格中的行进行删除行操作

VUE前端删除和批量删除

在element ui的el-table 我们需要先写出删除按钮接下来就可以在methods 中定义出这个方法了methods: {this.$confirm("此操作将删除信息, 是否继续?", "提示", {confirmButtonText: "确定",

weixin_46645338的博客 1万+

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

Vue复选框批量删除示例

通过使用v-model指令绑定单个复选框例如而本次我们要做的示例大致是这样的,首先可以增加内容,然后通过勾选来进行单独或者,但是在此处就可以进行批量操作。通过勾选原神和明日进行批量删除后,发现成功了,那么这就是表名咱们的操作没有问题,接下来就要具体代码实现。

m0_67587248的博客 1615

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测_2026-02-26

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测作为一名编程小白,我目前正在学习编译和运行 Qt 框架,也在逐步摸索开发环境的配置方法,目标是打造一款属于自己的个人效率工具。就在这时,我挖到了一个国家级硬核福利:国家超算互联网核心节点开放免费试运行!哪怕是零基础如我,也能申领到 100 卡时异构加速卡算力,关键是——2 月底前申请更稳妥,早占位早使用。

qq_58517981的博客 2127

群晖Docker安装GitLab

external_url ‘http://lanweixia.synology.me’ 这种情况访问页面的时候加上端口没问题,但是会导致http的克隆地址没有端口。external_url ‘http://lanweixia.synology.me:8000’ 加端口的话,又会导致页面访问不了,Gitlab也一直处于启动状态。​ 完成以后修改docke—>gitlab—>config---->gitlab.rb。就是上面改的端口(docker的端口)首次进入,会设置密码,这个密码就是用户名。

Lim的博客 9115

vue中批量删除的实现

注意上方getList的url为使用反转的单引号,不是平时使用的普通单引号。上面代码中 list为js data中声明的数据,用于接收后台返回的数据。前端和后台交互的JS。

shenxiaomo1688的博客 3388

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 631

用vue2 实现table复选框批量删除

/ 利用 filter方法 让用来渲染的数组 = 过滤出的未被选中状态的列表项生成新的数组,那么批量删除就完成了。// item.single 为绑定复选框状态的值。// tbodyList 为渲染的数组。// 首先添加一个批量删除按钮。

slhyyt011221的博客 627

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1168

PR工具timing report中setup time的计算过程

然后去pr工具里报告report_delay_calculation/reportDelayCalculation -from related_pin -to constraint_pin。这里constraint pin就是D pin (D0 D1 D2 D3),related pin就是 CK pin。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 460

vue3:使用:批量删除功能

element plus 批量删除功能

1363648943的专栏 3234

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 51

Vue3 + Element Plus 表格多选与批量删除功能详解

Vue.js 3 和 Element Plus 实现表格的多选及批量操作功能

qq_38669579的博客 1069

减法平均优化器(SABO)算法详解:从数学原理到工程应用

减法平均优化器(SABO)是一种基于数学概念的新型元启发式优化算法,由Trojanovský和Dehghani于2023年提出。该算法通过v-减法运算和平均值计算实现搜索优化,核心创新是采用目标函数值差异符号引导搜索方向。SABO具有参数少、结构简单、收敛快等特点,在高维复杂问题中表现优异。算法通过种群平均值保持多样性,利用符号函数确保搜索方向改进,自然平衡探索与开发。MATLAB实现显示其计算复杂度为O(N²·D),与主流群体智能算法相当。SABO不依赖生物或物理隐喻,数学基础坚实,在工程优化和机器学习领

qq_42212808的博客 166

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vue多选、全选和选中删除问题

<div id="vueContainer"> <div> <input type='checkbox' class='input-checkbox' :checked="fruitIds.length === fruits.length" @click='checkedAll()'>全选 <div v-for='(frui...

weixin_44760923的博客 3432

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

vue实现多选、全选

vue实现多选、全选功能,复制粘贴开箱即用,简简单单,干净卫生,欢迎C+V

m0_59224033的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue项目 element-ui中,table多选,影响右侧列表的数据,右侧删除某一条数据,table实时改变选中状态

vue项目 element-ui中,table多选,影响右侧列表的数据,右侧删除某一条数据,table实时改变选中状态

lj_1598的博客 1141

Java实现多选批量删除功能(vue+Element)

选择前效果图 选中效果图 前端vue代码 页面显示template 使用方法 @selection-change=“changeFun” 获取表中选中的行所有显示的数据 <template> <div class="dept tab-container"> <div class="dept-table"> <div id="query" class="newTable"> <!-- 列表数据展示--&g.

u013526643的专栏 1284

【Element UI样式优化】el-table多选行的实现 ==> 批量删除功能 ==> el-table含有不可选中行

ElementUI 提供了多选行table,同时若依框架也提供了成熟的多选表格。本文主要展示批量删除功能,以及多选行有不可选 2.添加selection-change ids用来保存select选中的行id;并使用single和mutiple记录选中情况。 二、实现批量删除功能 只有是multiple时,表示开启多选模式,才可以使用批量删除按钮 2.删除函数撰写 批量删除和行删除公用一个删除函数,通过是否有传参来区分。使用confirm二次确认。并最终调接口实现功能。 三、含有

Sabrina_cc的博客 6304

vue列表-批量删除功能

将以上示例代码添加到您的Vue组件中,在适当的位置显示资源列表,并在操作栏中添加"批量删除"按钮,并调用doBatchDel()方法删除所选中的资源。根据实际需求适配批量删除的业务逻辑和接口调用。在Vue组件的资源列表上方或下方添加一个操作栏,在操作栏中添加一个"批量删除"按钮。当用户选中一个或多个资源时,按钮才显示。当用户点击按钮时,调用doBatchDel()方法进行批量删除操作。在资源列表的顶部或底部添加一个"批量删除"按钮,用户可点击该按钮来删除所选中的资源。

weixin_63257279的博客 1405

vue列表删除多选和单选删除方法

一个是单选一个是多选,调的后台都是一样的,多选的给他传类型type=all ,单选的传类型 type = only,调取方法前判断,如果是多选的话,循环遍历把他的每一项id,都监听到,把id传给后台。单个的话,把id赋值给下标当成参数传给后台 ...

weixin_44727080的博客 1685

uniapp列表多选

选中并获取值,实现的代码如下: <template> <view class="index"> <view class="new_box" style="margin-top: 20upx;"> <view class="bbox"> <view class="list-box" v-for="(item,index) in list" :key="index"> <view class="list-ed"&g.

磨磨叽叽季 7826

vue多选下拉框

点击页面其他地方就会关闭,也可以手段点箭头关闭,会随着内容增加增加高度,宽度写死了,也可以写活,选中了选项可以删除,可以根据捕获选择事件来获取选中值 多选.vue <template> <div class="cx"> <div class="box"> <div class="content"> <span v-show="cList.length>0" v-for="(item,index) in cList" :key=..

KatyLight的博客 3422

uniapp列表点击多选和单选

<view class="title">物品类别</view> <view class="box dis-flex justify-between flex-wrap"> <view class="lias" :class="item.selected ? 'active' : ''" v-for="(item,index) in goodsCateogory" :key="index" @c...

九亿宅男的梦的博客 2456

el-table多选表格操作可删除单行,多选复选框可删除多行

el-table可删除多行,多选复选框可删除多行。

qq_52136609的博客 1160
上一篇: vue项目前端解决跨域问题
下一篇: 前端常用组件库
前端小小白~
博客等级 码龄7年 16粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值