# 动态表单
# 介绍
很多情况下,我们需要一个动态表单完成相对应的功能, z-element-ui 提供了这个功能,无论是 z-grid-form
还是 z-desc-form
,以及z-form
,都支持这个功能.
# 使用
将需要绑定的 form
格式更改为 Array
,就会自动开启动态表单,此时操作 form
数据即可对数据进行增删改查.
点击查看代码
<!-- @format -->
<template>
<div>
<z-grid-form v-model="form" :rules="rules" :items="formList" label-width="140px" ref="zGridForm">
<template #prepend="{ row, rowIndex }">
<div class="m-20" v-if="!rowIndex">
<span style="font-size: large; font-weight: 600">表单{{ rowIndex }}</span>
<el-button type="success" plain @click="add"> 新增 </el-button>
</div>
</template>
<template #append="scope">
<el-col :span="12" v-if="!!scope.rowIndex">
<el-button type="danger" plain @click="deleteRow(scope)"> 删除 </el-button>
</el-col>
</template>
</z-grid-form>
<el-button type="primary" plain @click="submitForm()"> 提交 </el-button>
</div>
</template>
<script>
export default {
name: 'zDynamicFormDemo',
data() {
return {
form: [{ check_in: '9:30' }],
rules: {
age: [
{ required: true, message: '请输入姓名', trigger: 'change' },
{ min: 2, max: 5, message: '长度在 2 到 5 个字符', trigger: 'change' }
]
},
formList: [
{
prop: 'age',
label: '年龄',
render: ({ vmodel }) => {
return <el-input v-model={vmodel.age} placeholder="请输入年龄" />;
},
class: 'border'
},
{
prop: 'check_in',
render: 'el-time-select',
label: '使用el-time-select',
class: 'border',
span: 12,
option: {
'picker-options': {
start: '08:30',
step: '00:15',
end: '10:30'
},
style: { width: '100%' }
}
}
]
};
},
methods: {
add() {
this.form.push({ check_in: '9:30' });
},
deleteRow({ rowIndex }) {
this.form.splice(rowIndex, 1);
},
submitForm() {
this.$refs.zGridForm.clearValidate();
}
}
};
</script>
<style scoped>
.example {
margin-bottom: 10px;
float: right;
}
</style>
提示
动态表单支持任何布局方式,和其他方式使用 z-form
表单, 只有 form
字段数据格式不同.
name | description | type |
---|---|---|
form | 将form字段改为 Array 类型,表单会自动开启动态编辑模式. | Array |
... | 各个布局的属性参数 | 详情查看各个表单文档. |