elementui组件table表格与dialog混合使用
时间: 2023-12-14 20:39:52 浏览: 34
可以将 ElementUI 的 Table 表格和 Dialog 对话框结合起来使用,实现表格数据的编辑、删除、详情等操作。以下是一个简单的示例:
```html
<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="{ row }">
<el-button @click="edit(row)">编辑</el-button>
<el-button @click="remove(row)">删除</el-button>
<el-button @click="detail(row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="dialogVisible" :title="dialogTitle">
<!-- 编辑表单 -->
<el-form v-if="dialogType === 'edit'" :model="editForm" :rules="editRules">
<el-form-item label="姓名" prop="name">
<el-input v-model="editForm.name"></el-input>
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input v-model.number="editForm.age"></el-input>
</el-form-item>
</el-form>
<!-- 详情展示 -->
<div v-else>
<p>姓名:{{ detailData.name }}</p>
<p>年龄:{{ detailData.age }}</p>
</div>
<div slot="footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="save">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '张三', age: 18 },
{ name: '李四', age: 22 },
{ name: '王五', age: 30 }
],
dialogVisible: false,
dialogTitle: '',
dialogType: '',
editForm: {
name: '',
age: ''
},
editRules: {
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
age: [{ required: true, message: '请输入年龄', trigger: 'blur' }]
},
detailData: {}
};
},
methods: {
// 编辑
edit(row) {
this.dialogType = 'edit';
this.dialogTitle = '编辑';
this.editForm = { ...row };
this.dialogVisible = true;
},
// 删除
remove(row) {
const index = this.tableData.indexOf(row);
this.tableData.splice(index, 1);
},
// 详情
detail(row) {
this.dialogType = 'detail';
this.dialogTitle = '详情';
this.detailData = { ...row };
this.dialogVisible = true;
},
// 保存
save() {
this.$refs.editForm.validate(valid => {
if (valid) {
const index = this.tableData.findIndex(item => item.name === this.editForm.name);
if (index > -1) {
this.tableData.splice(index, 1, this.editForm);
} else {
this.tableData.push(this.editForm);
}
this.dialogVisible = false;
}
});
}
}
};
</script>
```
在上面的示例中,我们首先渲染了一个基本的表格,并为每一行数据添加了“编辑”、“删除”和“详情”操作按钮。当用户点击“编辑”或“详情”按钮时,会弹出一个对话框,并根据不同的操作类型(edit 或 detail)来渲染不同的表单内容或详情展示。
在对话框中,我们使用了 ElementUI 的 Form 表单组件来渲染编辑表单。为了方便起见,我们使用了 Object.assign 或展开运算符来复制表格行数据,并将其作为表单的默认值。在保存表单时,我们使用了 Form 的 validate 方法来验证表单数据的合法性,并根据验证结果来保存表格数据。如果表单数据合法,则将其保存到表格数据中,并关闭对话框。如果表单数据不合法,则不保存数据,但仍保持对话框打开状态,以便用户修改表单数据。
总的来说,结合 Table 和 Dialog 组件可以为用户提供一个友好的数据交互界面,让用户可以轻松地进行表格数据的增删改查操作。