Vue练习--table增删改(老师版)

本文介绍了一个使用Vue.js构建的学生信息管理系统,该系统实现了学生信息的增删改查功能,包括学号、姓名和性别等字段的管理。通过表格展示学生信息,并提供按钮进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>学生信息登记</title>
		<link rel="stylesheet" href="css/bootstrap.css" />
		<script type="text/javascript" src="js/vue.js" ></script>
	</head>
	<body>
		<div id="app">
			<div class="container">
				<table class="table table-bordered table-hover">
					<tr>
						<td>
							学号
						</td>
						<td>
							姓名
						</td>
						<td>
							性别
						</td>
						<td>
							操作
						</td>
					</tr>
					<tr v-for="(item,index) in infoList">
						<td>
							{{item.id}}
						</td>
						<td>
							{{item.username}}
						</td>
						<td>
							{{item.sex}}
						</td>
						<td>
							<button class="btn btn-danger" @click="del(index)">删除</button>
							<button class="btn btn-info" @click="update(index)">修改</button>
						</td>
					</tr>
					<tr>
						<td colspan="4" class="text-center">
							<button class="btn btn-success" @click="add">增加</button>
						</td>
					</tr>
					<tr v-if="infoList.length==0">
						<td colspan="4" class="text-center">
							没有数据
						</td>
					</tr>
				</table>
				<hr />
				<form v-if="isShow">
					<h4>增加信息</h4>
					<div class="form-group">
						<input type="text" placeholder="请输入id" class="form-control" v-model="id" />
					</div>
					<div class="form-group">
						<input type="text" placeholder="请输入姓名" class="form-control" v-model="username"/>
					</div>
					<div class="form-group">
						<input type="text" placeholder="请输入性别" class="form-control" v-model="sex" />
					</div>
					<div class="form-group">
						<button class="btn btn-warning" type="button" @click="addInfo">增加</button>
					</div>
				</form>
				
				<form v-else>
					<h4>修改信息</h4>
					<div class="form-group">
						<input type="text" placeholder="请输入id" class="form-control" v-model="id" />
					</div>
					<div class="form-group">
						<input type="text" placeholder="请输入姓名" class="form-control" v-model="username"/>
					</div>
					<div class="form-group">
						<input type="text" placeholder="请输入性别" class="form-control" v-model="sex" />
					</div>
					<div class="form-group">
						<button class="btn btn-warning" type="button" @click="updateInfo">修改</button>
					</div>
				</form>
				
				
			</div>
		</div>
		<script>
//		del add update search
		
			new Vue({
				el:"#app",
				data:{
					infoList:[
						{id:1,username:"咖啡1",sex:"男"},
						{id:2,username:"咖啡2",sex:"男"},
						{id:3,username:"咖啡3",sex:"男"},
						{id:4,username:"咖啡4",sex:"男"},
						{id:5,username:"咖啡5",sex:"男"}
					],
					id:"",
					username:"",
					sex:"",
					isShow:true,
					tabIndex:-99999
				},
				methods:{
					addInfo:function(){
						var obj = {
							id:this.id,
							username:this.username,
							sex:this.sex
						}
						for (var i=0;i<this.infoList.length;i++) {
							if(this.infoList[i].id == obj.id){
								alert('有重复')
								return
							}
						}
						this.infoList.push(obj)
//						localStorage.setItem("newArr",JSON.stringify(this.infoList))
						this.id = ""
						this.username = ""
						this.sex = ""
					},
					add:function(){
						this.isShow = true
						this.username = ""
						this.id = ""
						this.sex = ""
					},
					del:function(index){
						
						this.infoList.splice(index,1)
						
					},
					update:function(index){
						this.isShow = false
						this.tabIndex = index
						this.id = this.infoList[index].id
						this.username = this.infoList[index].username
						this.sex = this.infoList[index].sex
					},
					updateInfo:function(){
						var obj = {
							id:this.id,
							username:this.username,
							sex:this.sex
						}
						this.infoList.splice(this.tabIndex,1,obj)
					}
				}
	
			})
		</script>
	</body>
</html>

显示:

### 使用 `vue-table-with-tree-grid` 实现增删改操作 #### 安装与引入组件 为了使用 `vue-table-with-tree-grid` 组件并实现数据的增删改功能,首先需要按照官方文档完成安装和基本配置。 通过 npm 安装该组件包: ```bash npm install vue-table-with-tree-grid --save ``` 接着,在项目的入口文件(通常是 main.js 或 app.js)中全局注册这个插件[^3]: ```javascript import Vue from 'vue'; import ZkTable from 'vue-table-with-tree-grid'; Vue.use(ZkTable); ``` #### 数据模型定义 对于树形表格来说,每一项记录都应该有一个唯一的标识符以及表示父子关系的关键字段。通常情况下会包含如下几个重要属性: - id (唯一键) - parentId (父节点ID, 如果是最顶级则为空或0) - name/title/label (显示名称) 这些信息用于构建层次化的视图结构,并支持后续的操作逻辑处理。 #### 创建带有 CRUD 功能的方法 ##### 添加新行方法 当用户点击新增按钮时触发此函数来向列表里追加一条新的子级项目,默认设置其为展开状态以便立即编辑输入框内的内容[^4]: ```javascript addNewRow(parentId) { const newRow = {id: this.generateUUID(), parentId, title: '', _expanded: true}; if (!parentId) { this.tableData.push(newRow); // 若无指定父级,则作为根节点加入数组末端 } else { let parentIndex = this.findParentIndexById(parentId); if (parentIndex !== -1 && Array.isArray(this.tableData[parentIndex].children)) { this.$set(this.tableData[parentIndex], "children", [...this.tableData[parentIndex].children, newRow]); } } } ``` ##### 删除选中行方法 移除当前被选中的那一行及其所有的后代节点,确保不会留下孤立的数据片段[^5]: ```javascript deleteSelectedRows() { function removeChildren(data, idsToDelete) { data.forEach((item, index) => { if (idsToDelete.includes(item.id)) { data.splice(index, 1); } else if (Array.isArray(item.children)) { item.children = removeChildren(item.children, idsToDelete).filter(Boolean); } }); return data; } let selectedIds = this.selectedItems.map(({id})=>id); this.tableData = removeChildren([...this.tableData], selectedIds); } ``` ##### 更新现有条目方法 允许修改已存在的某一行的信息,这里假设我们只更改了title这一列的内容[^2]: ```javascript updateExistingItem(updatedItem){ function updateItemRecursively(data, updatedItemId, newValue){ for(let i=0; i<data.length;i++){ if(data[i].id === updatedItemId){ Object.assign(data[i],newValue); break; }else if(Array.isArray(data[i].children)){ updateItemRecursively(data[i].children,updatedItemId,newValue); } } } updateItemRecursively(this.tableData, updatedItem.id,{...updatedItem}); } ``` 以上就是基于 `vue-table-with-tree-grid` 的一些基础CRUD操作方式介绍。实际应用过程中可能还需要考虑更多细节问题比如验证规则、异步加载等特性集成进去以满足具体业务场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值