远离其实很简单:就是在获取table数据后,对数组进行遍历,每一个都添加上一个show属性,并赋值为false,
然后在每个el-table-column中进行判断:
原理就是这样,其他的控件比如:选择框、时间框、数字选择框等等吧,都可以适用。
<el-table-column prop="name" label="地址">
<template scope="scope">
// 如果show=true的话,就显示el-input
<el-input size="small" v-model="scope.row.name" v-show="scope.row.show" placeholder="请输入内容"></el-input>
// 如果show=false的话,就显示值
<span v-show="!scope.row.show">{{scope.row.name}}</span>
</template>
</el-table-column>
效果如下:
下面是完整地代码:
<template>
<div class="rowEdit">
<div class="crud-opts">
<div class="crud-opts-left">
<el-button
class="filter-item"
size="mini"
type="text"
icon="el-icon-my-add"
@click="edit()"
>
编辑
</el-button>
<el-button
class="filter-item"
size="mini"
type="text"
icon="el-icon-my-publish"
@click="cancle"
>取消
</el-button>
<el-button
class="filter-item"
type="text"
icon="el-icon-my-delete"
size="mini"
@click="save"
>
保存
</el-button>
</div>
</div>
<!--表格渲染-->
<el-table ref="table" :height="tableHeight"
v-loading="loading"
:data="tabledatas"
@selection-change="selectItem"
@row-click="onSelectOp"
style="width: 100%;">
<el-table-column
type="selection"
width="55"
:reserve-selection="false"
></el-table-column>
<el-table-column prop="dydjbm" label="电压等级">
<template scope="scope">
<el-select v-model="scope.row.dydjbm" v-show="scope.row.show" placeholder="请选择">
<el-option
v-for="item in dydjbm"
:key="item.value"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
<span v-show="!scope.row.show">{{scope.row.dydjbm}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="地址">
<template scope="scope">
<el-input size="small" v-model="scope.row.name" v-show="scope.row.show" placeholder="请输入内容"></el-input>
<span v-show="!scope.row.show">{{scope.row.name}}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data(){
return{
dydjbm: [{
value: '选项1',
label: '黄金糕'
}, {
value: '选项2',
label: '双皮奶'
}],
tabledatas: [],
selectlist: []
}
},
methods:{
/**
单个去勾选时触发自定义的selectItem函数
@selection-change事件会默认传行数据进去,
用selectItem(rows)的rows接收就好,rows所选行数据的数组
*/
selectItem(rows) {
if (rows.length > 1) {
var newRows = rows.filter((it, index) => {
if (index == rows.length - 1) {
this.$refs.table.toggleRowSelection(it, true);
return true;
} else {
this.$refs.table.toggleRowSelection(it, false);
return false;
}
});
this.selectlist = newRows;
} else {
this.selectlist = rows;
}
},
/**
点击那一行数据触发的事件默认传点击那行的数据,自定义onSelectOp(row)函数,
用row来接收点击的那行数据,
先把所有的选项清空this.$refs.multipleTable.clearSelection();
再把点击的那行勾选this.$refs.multipleTable.toggleRowSelection(row, true);
把自定义数组清空this.selectlist = [];
把新勾选的数据push进数组this.selectlist.push(row);
*/
onSelectOp(row) {
this.$refs.table.clearSelection();
this.$refs.table.toggleRowSelection(row, true);
this.selectlist = [];
this.selectlist.push(row);
},
// 编辑
edit(row){
this.selectlist[0].show=true
},
//保存
save(){
this.selectlist[0].show = false
},
//取消
cancle(){
this.selectlist[0].show = false
}
},
created(){
// 发请求去后台拿数据,如果有api,就正常请求,
//我这里是demo,就简单给list赋值了,原理一样。
// getlistApi().then(res => {
// let list = res.data.list
let list = [
{
dydjbm: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
}, {
dydjbm: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
dydjbm: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
}, {
dydjbm: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}]
list.forEach(element => {
element["show"] = false
});
this.tabledatas = list
}
}
</script>
<style>
</style>