Vue开发项目的时候,碰到了需要对表格内容进行实时编辑提交的需求。这里提供两种可编辑表格的实现方法,供大家学习参考。

方法一:点击即编辑,离开则提交

HTML代码片段:

// 表格
 <el-table
 	class="tb-edit"
 	:data="tableData"
    style="width: 100%"
    highlight-current-row
    @row-click="handleCurrentChange"
	> 
    <el-table-column prop="id" label="工号">
    	<template slot-scope="scope">
        <el-input
        	size="small"
            v-model="scope.row.id"
            placeholder="请输入内容"
            @change="handleEdit(scope.$index, scope.row)"
            ></el-input>
        <span >{{scope.row.id}}</span>
        </template>
	</el-table-column>
    <el-table-column prop="name" label="姓名">
    	<template slot-scope="scope">
        	<el-input
            	size="small"
                v-model="scope.row.name"
                placeholder="请输入内容"
                @change="handleEdit(scope.$index, scope.row)"
            ></el-input>
            <span>{{scope.row.name}}</span>
            </template>
            </el-table-column>
            <el-table-column prop="age" label="年龄" >
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.age"
                  placeholder="请输入内容"
                  @change="handleEdit(scope.$index, scope.row)"
                ></el-input>
                <span>{{scope.row.age}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="score" label="成绩" >
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.score"
                  placeholder="请输入内容"
                  @change="handleEdit(scope.$index, scope.row)"
                ></el-input>
                <span>{{scope.row.score}}</span>
              </template>
            </el-table-column>
         </el-table>

JS代码:

export default {
  name: "UserList",
  data() {
    return {
      tableData:[
	    {
	      id: '10001',
	      name: '张三',
	      age: '26',
	      score: '90'
	    },
		{
	      id: '10002',
	      name: '李四',
	      age: '27',
	      score: '95'
	    },
		{
	      id: '10003',
	      name: '王五',
	      age: '26',
	      score: '98'
	    }], 
	 userName: "",
      userId: "",
     };
  },
  methods: {
    handleEdit(index, row) {
      console.log(index, row);
      console.log(this.tableData);
    },
    handleCurrentChange(row, event, column) {
      console.log(row, event, column);
    }
}

CSS代码:

.tb-edit .el-input {
  display: none;
}
.tb-edit .current-row .el-input {
  display: block;
}
.tb-edit .current-row .el-input + span {
  display: none;
}

方法二:点击右侧编辑按钮编辑,按钮显示切换成“保存”,点击保存,将信息提交,按钮显示切换成“编辑”

HTML代码片段:

<el-table :data="tableData" style="width: 100%">
            <el-table-column prop="id" label="工号">
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.id"
                  v-show="scope.row.showEdit"
                  placeholder="请输入内容"
                ></el-input>
                <span v-show="!scope.row.showEdit">{{scope.row.id}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="name" label="姓名">
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.name"
                  v-show="scope.row.showEdit"
                  placeholder="请输入内容"
                ></el-input>
                <span v-show="!scope.row.showEdit">{{scope.row.name}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="age" label="年龄">
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.age"
                  v-show="scope.row.showEdit"
                  placeholder="请输入内容"
                ></el-input>
                <span v-show="!scope.row.showEdit">{{scope.row.age}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="score" label="分数">
              <template slot-scope="scope">
                <el-input
                  size="small"
                  v-model="scope.row.score"
                  v-show="scope.row.showEdit"
                  placeholder="请输入内容"
                ></el-input>
                <span v-show="!scope.row.showEdit">{{scope.row.score}}</span>
              </template>
            </el-table-column>
            <el-table-column label="操作">
              <template slot-scope="scope">
                <el-button
                  size="small"
                  class="btn bg_green"
                  @click="handleEdit(scope.$index, scope.row)"
                >{{scope.row.showEdit?'保存':"修改"}}</el-button>
              </template>
            </el-table-column>
</el-table>

JS代码:

export default {
  name: "UserList",
  data() {
    return {
      tableData:[
	    {
	      id: '10001',
	      name: '张三',
	      age: '26',
	      score: '90',
	      showEdit: false
	    },
		{
	      id: '10002',
	      name: '李四',
	      age: '27',
	      score: '95',
	      showEdit: false
	    },
		{
	      id: '10003',
	      name: '王五',
	      age: '26',
	      score: '98',
	      showEdit: false
	    }], 
	 userName: "",
      userId: "",
     };
  },
  methods: {
    handleEdit(index, row) {
      console.log(index, row);
      row.showEdit = !row.showEdit;
      if (!row.showEdit) {
        console.log("提交");
        console.log(row);
       }
    }
}
Logo

前往低代码交流专区

更多推荐