element-ui 单元格可编辑

一、在使用 element-ui 时,一般都会用到表格组件,在使用过程中,有可能会遇到一种需求:双击任意单元格进行编辑

二、我的实现思路是这样:

​ 1、双击后单元格后,单元格能够输入内容

​ 2、获取输入的内容,更新该单元格对应的数据

三、具体实现

1、让单元格更够输入,第一时间肯定想到的是输入框,其实还有一个方法也能实现输入功能,给元素手动设置一个属性,即:

<div contenteditable="true"></div>

contenteditable 属性设置为 true 后,div 就会进入可编辑状态,我们就可以愉快的输入任何内容了

2、div 可以输入了,接下来就是要获取输入的内容了,可以通过事件实现

<el-table-column label="姓名" align="center">
	<template slot-scope="{row, $index}">
		<div style="cursor: pointer;" @dblclick="clickDiv" @blur="divBlur($event, $index, 'name')">{{row.name}}</div>
	</template>
</el-table-column>

自定义表格列的渲染,给 div 绑定两个事件:dblclick、blur

methods: {
	// div双击事件
	clickDiv(e){
		e.target.setAttribute('contenteditable', true)  // 开启 div 的编辑功能
		e.target.style.border = '1px solid #ccc'  // 给 div 设置一个边框
		e.target.focus()  // div 自动获取焦点,方便 blur 的逻辑运行
	},
    // div失去焦点事件
	divBlur(e, index, filed_name){
		e.target.setAttribute('contenteditable', false)  // 取消 div 的可编辑状态
		e.target.style.border = '0 none'  // 去除 div 的边框
		this.tableData[index][filed_name] = e.target.innerText  // 更新修改的单元格的值,filed_name:单元格值对应的字段名,这里应该更新后台中的数据
	},
}

以上步骤即可实现编辑表格的任意单元格

四、具体实现如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
	</head>
	<body>
		<div id="app">
			<el-table :data="tableData" border>
				<el-table-column label="序号" width="200" align="center" type="index"></el-table-column>
				<el-table-column label="姓名" align="center">
					<template slot-scope="{row, $index}">
						<div style="cursor: pointer;" @dblclick="clickDiv" @blur="divBlur($event, $index, 'name')">{{row.name}}</div>
					</template>
				</el-table-column>
				<el-table-column label="年龄" align="center">
					<template slot-scope="{row, $index}">
						<div style="cursor: pointer;" @dblclick="clickDiv" @blur="divBlur($event, $index, 'age')">{{row.age}}</div>
					</template>
				</el-table-column>
				<el-table-column label="性别" align="center">
					<template slot-scope="{row, $index}">
						<div style="cursor: pointer;" @dblclick="clickDiv" @blur="divBlur($event, $index, 'sex')">{{row.sex}}</div>
					</template>
				</el-table-column>
			</el-table>
		</div>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script type="text/javascript">
			const table_data = [
				{
					id: 1,
					name: '小明',
					age: 18,
					sex: '男'
				},
				{
					id: 2,
					name: '小红',
					age: 17,
					sex: '女'
				},
				{
					id: 3,
					name: '小刚',
					age: 20,
					sex: '男'
				}
			]
			new Vue({
				el: '#app',
				data: {
					tableData: table_data,
				},
				methods:{
					// div双击事件
					clickDiv(e){
						e.target.setAttribute('contenteditable', true)
						e.target.style.border = '1px solid #ccc'
						e.target.focus()
					},
					// div失去焦点事件
					divBlur(e, index, filed_name){
						e.target.setAttribute('contenteditable', false)
						e.target.style.border = '0 none'
						this.tableData[index][filed_name] = e.target.innerText  // 更新修改的单元格的值
						console.log(this.tableData);
					},
				}
			})
		</script>
	</body>
</html>
Element UI 提供了一个叫做 `el-table-column` 的组件,可以设置为可编辑单元格,通常通过 `edit-render-field` 属性来实现。在 `<el-table>` 标签里,你可以配置一个自定义的编辑功能。例如,你可以创建一个编辑状态的字段,并提供一个确认和取消按钮来允许用户修改单元格的内容。 这是一个基本的例子: ```html <template> <el-table :data="tableData" :cell-editable="true" <!-- 开启单元格编辑 --> > <el-table-column prop="name" label="姓名" edit-render-field="renderEditField" <!-- 使用自定义编辑函数 --> /> <!-- ...其他列... --> </el-table> </template> <script> export default { methods: { renderEditField(value) { return ( <el-input v-model="value" placeholder="请输入"></el-input> <button @click="cancelEdit">取消</button> <button @click="confirmEdit">保存</button> ); }, confirmEdit(row, column, cellValue) { // 确认修改后的值,这里假设我们保存到了 `row` 对象的对应属性 row.name = cellValue; // 可以触发表格数据的更新,如使用 `this.$refs.myTable.refreshData()` 或者在外部管理数据的状态 }, cancelEdit() { // 取消编辑,恢复原始值 }, }, data() { return { tableData: [{ name: '张三' }] }; } }; </script> ``` 在这个例子中,当单元格变为可编辑模式,用户可以在 `<el-input>` 中输入新的值,点击 "保存" 按钮则调用 `confirmEdit` 方法保存新值,点击 "取消" 则执行 `cancelEdit` 返回到原始值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值