删除选中的

AngularJS数据绑定与操作示例
本文通过一个具体的示例,展示了如何使用AngularJS进行数据绑定、操作及响应式表单控制。示例中包括了如何实现表格数据的动态显示、删除功能、全选与反选操作,以及如何通过AngularJS的指令和控制器来管理这些功能。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../angular-1.5.5/angular.js"></script>
<style>
button{
border-radius:8px;
margin-left: 320px;
border: 1px solid #387ef5;
background: #387ef5;
color: white;
}
table{
border: 1px solid #555555;
width: 400px;
}
</style>
<script>
var myapp=angular.module("myapp",[]);
myapp.controller("myCtrl",function ($scope) {
$scope.data = [{
id:"1",
name:"zs",
age:"12",
sex:"男",
check:false
},
{
id:"2",
name:"ls",
age:"13",
sex:"女",
check:false
},{
id:"3",
name:"ww",
age:"16",
sex:"男",
check:false
},
{
id:"4",
name:"zx",
age:"19",
sex:"女",
check:false
}
];
$scope.del=function () {
var num=0;
for(var i=0;i<$scope.data.length;i++){
if($scope.data[i].check==false){
num++;
}
}
if(num==$scope.data.length){
alert("请勾选数据");
}else{
for(var i=0;i<$scope.data.length;i++){
if($scope.data[i].check==true){
$scope.data.splice(i,1);
i--;
}
}
}
}
//全选
$scope.checkAll=false;
$scope.check2=function () {
if($scope.checkAll==true){
for(var i=0;i<$scope.data.length;i++){
$scope.data[i].check=true;
}
}else{
for(var i=0;i<$scope.data.length;i++){
$scope.data[i].check=false;
}
}
}
//反选
var n=0;
$scope.count=function (index) {
if($scope.data[index].check==true){
n++;
}else{
n--;
}if(n==$scope.data.length){
$scope.checkAll=true;
}else{
$scope.checkAll=false;
}
}
});
</script>
</head>
<body ng-app="myapp" ng-controller="myCtrl">
<button ng-click="del()">删除选中的</button>
<table border="1" cellpadding="10" cellspacing="0">
<thead>
<tr>
<th><input type="checkbox" ng-click="check2()" ng-model="checkAll"></th>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in data">
<td><input type="checkbox" ng-model="item.check" ng-click="count($index)"></td>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.age}}</td>
<td>{{item.sex}}</td>
</tr>
</tbody>
</table>

</body>
</html>

转载于:https://www.cnblogs.com/wsq110/p/7710999.html

<think>我们正在讨论前端实现删除选中图片的功能。根据用户提供的引用[1],已经实现了图片的多选功能(通过点击图片切换isChoose状态,并将选中的图片id存入selectedList数组)。 现在用户想要实现删除选中图片的功能,我们需要考虑以下步骤: 1. 用户触发删除操作(比如点击一个删除按钮) 2. 从数据中移除所有被选中的图片(即isChoose为true的图片) 3. 同时更新视图 假设我们的数据结构如下(参考引用中的equipmentList): equipmentList: [ { id: 1, name: '图片1', sampleImage: 'path1.jpg', isChoose: false }, { id: 2, name: '图片2', sampleImage: 'path2.jpg', isChoose: true }, ... ] 并且有一个selectedList数组,存储了被选中图片的id。 删除功能可以这样实现: - 当用户点击删除按钮时,我们遍历selectedList(或直接根据equipmentList中isChoose的状态),将选中的图片从equipmentList中移除。 - 同时,清空selectedList数组,因为删除后这些选中项已不存在。 但是注意:由于Vue的响应式系统,我们不能直接通过索引删除,而应该使用Vue.set或者数组的变异方法(如splice)来确保视图更新。 具体步骤: 1. 在methods中定义一个删除方法,比如deleteSelected。 2. 在deleteSelected方法中,我们过滤掉equipmentList中被选中的项(即isChoose为true的项),同时将未被选中的项保留,形成新的数组。 或者,我们可以遍历selectedList,根据id找到在equipmentList中的索引,然后逐个删除。但是注意,如果同时删除多个,从后往前删除可以避免索引变化的问题。 但是,更简单的方法是使用过滤,直接创建一个新的数组,只保留未被选中的项。 示例代码: ```javascript deleteSelected() { // 方法1:使用filter,保留未选中的图片 this.equipmentList = this.equipmentList.filter(item => !item.isChoose); // 同时,清空selectedList,因为选中的已经被删除了 this.selectedList = []; } ``` 或者,如果不想改变equipmentList的引用(比如可能有其他依赖),我们可以使用循环删除,但要注意循环删除数组元素时,从后往前删除可以避免索引问题: ```javascript deleteSelected() { // 方法2:从后往前遍历equipmentList,删除选中的项 for (let i = this.equipmentList.length - 1; i >= 0; i--) { if (this.equipmentList[i].isChoose) { this.equipmentList.splice(i, 1); } } this.selectedList = []; } ``` 两种方法都可以,方法1更简洁,方法2适用于不想改变数组引用的情况(但实际上方法1会改变引用,而方法2是在原数组上操作)。 另外,我们还需要在界面上添加一个删除按钮,并绑定删除方法: ```html <button @click="deleteSelected">删除选中图片</button> ``` 注意:如果当前没有选中的图片,我们可以禁用删除按钮,或者提示用户。这里可以增加一个判断: ```html <button @click="deleteSelected" :disabled="selectedList.length===0">删除选中图片</button> ``` 综上所述,实现删除选中图片的功能主要是在删除事件中处理数据,并确保响应式更新。 另外,用户可能还希望有提示,比如确认删除,我们可以使用confirm: ```javascript deleteSelected() { if (this.selectedList.length === 0) { // 可以提示没有选中任何图片 return; } if (confirm('确定要删除选中的图片吗?')) { // 执行删除操作 this.equipmentList = this.equipmentList.filter(item => !item.isChoose); this.selectedList = []; } } ``` 这样,删除功能就实现了。 总结: 1. 利用已有的选中状态(isChoose或selectedList)来识别要删除的图片。 2. 使用数组的filter方法或splice方法(从后往前遍历)来删除选中的图片。 3. 更新selectedList数组(清空)。 4. 在模板中添加删除按钮,并绑定删除方法,同时根据是否有选中项来设置按钮的禁用状态。 希望这能帮助用户解决问题。 </think>### 前端删除选中图片功能的实现方法 要实现删除选中图片的功能,需要结合状态管理和DOM操作。以下是基于Vue框架的完整实现方案(兼容小程序和Web): #### 1. 核心实现思路 - **数据结构**:图片对象包含`id`、`url`和`isSelected`属性 - **状态管理**: - `imageList`:存储所有图片数据 - `selectedIds`:存储被选中图片的ID集合 - **删除逻辑**: - 筛选出未选中的图片生成新列表 - 清空选中状态 - 更新视图 #### 2. 完整代码实现 ```html <template> <div> <!-- 图片列表 --> <div v-for="img in imageList" :key="img.id" @click="toggleSelect(img)" :class="{ selected: img.isSelected }"> <img :src="img.url" class="preview-image"> <div>{{ img.name }}</div> </div> <!-- 删除按钮 --> <button @click="deleteSelected" :disabled="selectedIds.length === 0"> 删除选中图片 ({{ selectedIds.length }}) </button> </div> </template> <script> export default { data() { return { imageList: [ { id: 1, name: "图1", url: "/img1.jpg", isSelected: false }, { id: 2, name: "图2", url: "/img2.jpg", isSelected: false }, // ...更多图片 ], selectedIds: [] // 存储选中ID }; }, methods: { // 切换选中状态 toggleSelect(img) { img.isSelected = !img.isSelected; if (img.isSelected) { this.selectedIds.push(img.id); } else { const index = this.selectedIds.indexOf(img.id); if (index > -1) this.selectedIds.splice(index, 1); } }, // 删除选中图片 deleteSelected() { if (this.selectedIds.length === 0) return; // 1. 过滤出未选中的图片 this.imageList = this.imageList.filter( img => !this.selectedIds.includes(img.id) ); // 2. 清空选中状态 this.selectedIds = []; // 可选:显示操作反馈 this.$toast.success(`已删除${this.selectedIds.length}张图片`); } } }; </script> <style scoped> .preview-image { width: 100px; height: 100px; object-fit: cover; border: 2px solid transparent; } .selected { border-color: #1890ff !important; } button:disabled { opacity: 0.5; cursor: not-allowed; } </style> ``` #### 3. 关键实现细节 1. **双向状态绑定**: - 通过`img.isSelected`控制UI选中状态 - `selectedIds`数组独立存储ID,便于批量操作 2. **高效删除实现**: ```javascript // 时间复杂度O(n) this.imageList = this.imageList.filter( img => !this.selectedIds.includes(img.id) ); ``` 3. **用户体验优化**: - 按钮禁用状态:无选中时禁用按钮 - 视觉反馈:选中图片高亮边框 - 操作提示:显示删除数量 - 防误触:可添加确认对话框 #### 4. 小程序适配要点 ```html <!-- 微信小程序语法示例 --> <view v-for="(img, index) in imageList" :key="index" @tap="toggleSelect(img)" :class="{'selected': img.isSelected}" > <image :src="img.url" mode="aspectFill"></image> <text>{{img.name}}</text> </view> <button @tap="deleteSelected" :disabled="selectedIds.length===0">删除</button> ``` ### 相关优化技巧 1. **批量删除性能**:超大列表时使用索引映射 ```javascript const selectedSet = new Set(this.selectedIds); this.imageList = this.imageList.filter(img => !selectedSet.has(img.id)); ``` 2. **撤销功能实现**: ```javascript let backup = []; // 在删除前备份数据 deleteSelected() { backup = [...this.imageList]; // ...执行删除 } ``` 3. **动画效果**:使用Vue的`<transition-group>` ```html <transition-group name="fade"> <!-- 图片项 --> </transition-group> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值