共计 2736 个字符,预计需要花费 7 分钟才能阅读完成。
页面成果
数据结构
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(),而后遇到如下问题,选中四个只删除了两个 (过后脑子不晓得咋想的。。。)
[图片上传失败 …(image-44b5f3-1662600608087)]
// 最开始写的删除办法
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>
正文完