在 Vue.js 中,使用 Element UI 的 el-table 组件可以方便地实现添加行、修改行、单独删除行和批量删除行的操作。下面是一个示例:xmlCopy

<template>
  <div>
    <el-table :data="tableData">
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button type="text" size="small" @click="editRow(scope.row)">编辑</el-button>
          <el-button type="text" size="small" @click="deleteRow(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-button type="primary" @click="addRow">添加行</el-button>
    <el-button type="danger" @click="deleteSelectedRows" :disabled="selectedRows.length === 0">批量删除</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 25 },
        { name: '王五', age: 30 }
      ],
      showAddDialog: false,
      showEditDialog: false,
      selectedRows: [],
      newRecord: {
        name: '',
        age: null
      },
      editingRecord: null
    }
  },
  methods: {
    addRow() {
      this.showAddDialog = true
    },
    editRow(row) {
      this.editingRecord = Object.assign({}, row)
      this.showEditDialog = true
    },
    deleteRow(row) {
      const index = this.tableData.indexOf(row)
      this.tableData.splice(index, 1)
    },
    deleteSelectedRows() {
      for (const row of this.selectedRows) {
        const index = this.tableData.indexOf(row)
        this.tableData.splice(index, 1)
      }
      this.selectedRows = []
    },
    confirmAdd() {
      this.tableData.push(Object.assign({}, this.newRecord))
      this.showAddDialog = false
      this.newRecord = {
        name: '',
        age: null
      }
    },
    confirmEdit() {
      Object.assign(this.editingRecord, this.selectedRows[0])
      this.showEditDialog = false
      this.editingRecord = null
    }
  },
  computed: {
    addDialogVisible() {
      return this.showAddDialog
    },
    editDialogVisible() {
      return this.showEditDialog
    }
  }
}
</script>

<template>
  <div>
    <el-dialog title="添加行" :visible.sync="addDialogVisible">
      <el-form>
        <el-form-item label="姓名">
          <el-input v-model="newRecord.name"></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input-number v-model="newRecord.age"></el-input-number>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="showAddDialog = false">取消</el-button>
        <el-button type="primary" @click="confirmAdd">确定</el-button>
      </div>
    </el-dialog>
    <el-dialog title="编辑行" :visible.sync="editDialogVisible">
      <el-form>
        <el-form-item label="姓名">
          <el-input v-model="editingRecord.name"></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input-number v-model="editingRecord.age"></el-input-number>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="showEditDialog = false">取消</el-button>
        <el-button type="primary" @click="confirmEdit">确定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

在上面的示例中,我们使用 el-table 组件渲染数据,其中每一行都包含一个“编辑”按钮和一个“删除”按钮。点击“添加行”按钮会打开一个对话框,可以输入新行的数据并确认添加。点击“编辑”按钮会打开一个对话框,可以修改当前行的数据并确认保存。点击“删除”按钮会直接删除当前行。可以通过勾选多行数据来进行批量删除操作。

在组件的 data 选项中,我们定义了以下变量:

  • tableData: 存储表格的数据。
  • showAddDialogshowEditDialog:控制添加和编辑对话框的显示和隐藏。
  • selectedRows:存储当前勾选的行。
  • newRecordeditingRecord:存储添加和编辑对话框中的数据。

在组件的 methods 中,我们定义了以下方法:

  • addRow:打开添加对话框。
  • editRow:打开编辑对话框。
  • deleteRow:删除指定行。
  • deleteSelectedRows:批量删除勾选的行。
  • confirmAdd:确认添加新行。
  • confirmEdit:确认编辑当前行。

在组件的 computed 中,我们定义了 addDialogVisible 和 editDialogVisible 计算属性,用于控制添加和编辑对话框的显示状态。

最后,我们在组件的模板中定义了两个对话框,分别用于添加和编辑行的操作。

需要注意的是,以上示例只是一种实现方式,具体的实现方式可能因项目需求而异。

By lxcss

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注