网上找了很久都不靠谱,我自己写了个完整的demo,写完之后发现原理其实也很简单,代码,重要的是思路,正常情况下批量删除都是走接口,可偏偏就有不这么干的,最近公司有个项目的要求就是,点新增出一个弹框,弹框内还有表格,并且要用户自己点击新增添加表格数据,还要有批量删除,因为有很多意想不到的需求,所以全程不让走接口(很多交互后台不嫩实现),直至最后保存时才走接口,这才遇到以下问题。段龙龙博客原创首发,本篇禁止转发。
我看过element ui的说明,再勾选时并没有给出我们已经勾选数据的索引值,没办法,只能自己造,下面大家看看勾选后默认给出的数据是什么样的
看了没,直接把选中的数据弄成新数组返回来了,下面给大家发DEMO,里面的逻辑都注释好了,完整的可以直接运行查看
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
<div id="app">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="日期">
<el-input v-model="formInline.date" placeholder="日期"></el-input>
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="formInline.name" placeholder="姓名"></el-input>
</el-form-item>
<el-form-item label="地址">
<el-input v-model="formInline.address" placeholder="地址"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">新增</el-button>
</el-form-item>
</el-form>
<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="arrsDel()">批量删除</el-button>
</div>
</div>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
formInline: {
date: '',
name: '',
address: ''
},
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: []
},
created() {
// 页面默认有没有数据不重要,重要的是拿到数据或数据改变就要去处理数据,添加或改变自增id,也就是模拟索引值
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].zizengId = i;
}
},
methods: {
// 获取选中的数据
handleSelectionChange(val) {
console.log('下面打印的是选中的数据')
console.log(val)
this.multipleSelection = val;
},
// 批量删除
arrsDel() {
// 删除时arr接收选中数据的自增Id
let arr = [];
for (let i = 0; i < this.multipleSelection.length; i++) {
arr.push(this.multipleSelection[i].zizengId) //此处接收了所有选中的自增id
}
arr.sort(); //此处作用是将数组内的值从小到大排序,下面循环从小到大删除,就不会出现问题
for (let a = 0; a < arr.length; a++) {
this.tableData.splice(arr[a] - a, 1); //这一步就已经删除成功了,arr[a]-a的原因是每次删除后原数组都会发生变化,我们的删除起点要改变一下
}
// 删除完成后要从新排一下我们的自增id
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].zizengId = i;
}
},
// 增加新数据
onSubmit() {
this.tableData.unshift({
date: this.formInline.date,
name: this.formInline.name,
address: this.formInline.address,
})
// 添加完数据还要从新排一下我们的自增id哦
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].zizengId = i;
}
}
}
})
</script>
</body>
</html>