双击哪个单元格就编辑哪个单元格,先上效果图,
实现思路:
在单元格下添加一个模板,模板里面有正常状态的span和编辑状态的input框,双击显示input框,input框失去焦点显示span
实现代码:
<el-table-column prop="name" label="姓名" width="120">
<template scope="scope">
<div @dblclick="boxClick(scope.row)">
<el-input v-if="scope.row.nameFlag" v-model="scope.row.name"
placeholder="请输入内容"
v-on:blur="inputblur(scope.row)" v-focus></el-input>
<span v-else>{{scope.row.name}}</span>
</div>
</template>
</el-table-column>
数据:
{
date: "2016-05-03",
name: "王小虎",
nameFlag: false,
address: "上海市普陀区金沙江路 1518 弄",
},
涉及到的方法:
// 双击模板里面的div容器,使input框显示
boxClick(row){
row.nameFlag = true
},
// input框失去焦点 span显示
inputblur(row) {
row.nameFlag = false
},
因为饿了么的input框 有非常好用的v-model双向数据绑定,所以绑定之后修改的就是对象数据,
还有一个注意点:
本来写完后以为大功告成,测了下,发现点击别处的时候,模板里面的input框不消失,就是根本不调用inputblur,想了想,发现是input框出现的时候,没有自动获取焦点的功能。对于这种需要循环的表格来说,如果使用dom操作不太方便,万幸vue有一个自定义指令,这样自动获取焦点会很方便,代码如下:
directives: {
// 注册一个局部的自定义指令 v-focus
focus: {
// 指令的定义
inserted: function(el) {
// 聚焦元素
el.querySelector("input").focus();
}
}
},