在Vue项目中使用ElementUI生成表单,可以使用ElementUI提供的Form和FormItem组件。接收后端传过来的数据动态生成表单元素,可以使用v-for指令进行循环渲染。
在动态添加表单验证方面,可以使用ElementUI提供的rules属性。针对三种需求,可以分别定义三个验证规则函数:
1. 不能为空:
```
rules: {
required: [
{ required: true, message: '该项不能为空', trigger: 'blur' }
]
}
```
2. 只允许输入小数:
```
rules: {
decimal: [
{ pattern: /^[0-9]+(\.[0-9]{1,2})?$/, message: '只能输入数字和小数点,小数点后最多两位', trigger: 'blur' }
]
}
```
3. 只允许小数且保留小数点后2位:
```
rules: {
decimal2: [
{ pattern: /^(([1-9]\d{0,9})|0)(\.\d{1,2})?$/, message: '只能输入数字和小数点,小数点后最多两位', trigger: 'blur' }
]
}
```
最后,通过v-model指令将表单元素与数据绑定在一起,就可以实现动态生成表单和表单验证了。完整代码示例如下:
```html
<template>
<el-form ref="form" :model="form" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item v-for="(item, index) in formItems" :key="index" :label="item.label">
<template v-if="item.type === 'input'">
<el-input v-model="form[item.prop]" :placeholder="item.placeholder"></el-input>
</template>
<template v-else-if="item.type === 'select'">
<el-select v-model="form[item.prop]" placeholder="请选择">
<el-option v-for="(option, i) in item.options" :key="i" :label="option.label" :value="option.value"></el-option>
</el-select>
</template>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
formItems: [
{
label: '输入框1',
type: 'input',
prop: 'input1',
placeholder: '请输入'
},
{
label: '输入框2',
type: 'input',
prop: 'input2',
placeholder: '请输入'
},
{
label: '输入框3',
type: 'input',
prop: 'input3',
placeholder: '请输入'
},
{
label: '选择框1',
type: 'select',
prop: 'select1',
options: [
{ label: '选项1', value: 'option1' },
{ label: '选项2', value: 'option2' },
{ label: '选项3', value: 'option3' }
]
},
{
label: '选择框2',
type: 'select',
prop: 'select2',
options: [
{ label: '选项1', value: 'option1' },
{ label: '选项2', value: 'option2' },
{ label: '选项3', value: 'option3' }
]
}
],
form: {
input1: '',
input2: '',
input3: '',
select1: '',
select2: ''
},
rules: {
input1: [
{ required: true, message: '输入框1不能为空', trigger: 'blur' }
],
input2: [
{ required: true, message: '输入框2不能为空', trigger: 'blur' },
{ pattern: /^[0-9]+(\.[0-9]{1,2})?$/, message: '只能输入数字和小数点,小数点后最多两位', trigger: 'blur' }
],
input3: [
{ required: true, message: '输入框3不能为空', trigger: 'blur' },
{ pattern: /^(([1-9]\d{0,9})|0)(\.\d{1,2})?$/, message: '只能输入数字和小数点,小数点后最多两位', trigger: 'blur' }
],
select1: [
{ required: true, message: '请选择选择框1', trigger: 'change' }
],
select2: [
{ required: true, message: '请选择选择框2', trigger: 'change' }
]
}
}
}
}
</script>
```