通过vue来验证bootstrap5的表单
2023-08-11 13:01:42
bootstrap5中form Validation提供三种方式:1) client-side 2)brower-default 3) server-side.
对于前两种方式,都不能做个性化验证,象elementui那样灵活。还有就是有自定义输入控件时,利用client-side或browser-default就很难处理了。
因此server-side变成唯一选择。只是有了vue等前端框架外,其实server-side也没传到后端,也是在前端完成的。具体实践如下:
- form中传递isInvalid到各输入组件,并加入一个invalid-feedback div.
<form ref="editorForm" @submit.prevent="onSubmit">
<div class="modal-header">
......
<component
:is="getInputComp(tmpFieldType)"
......
:isInvalid="invaldateFields[fld]"
@update:modelValue="changeValue(fld, $event)"
/>
<div v-if="fieldRequired(fld)" class="invalid-feedback">
{{ fieldPlaceHolder(fld) }}.
</div>
- data中加入invaldateFields: {}
- onSubmit()时,验证下数据.
onSubmit (event) {
let allValdate = true
this.formFields.forEach(fld=>{
if (this.fieldRequired(fld) && !this.data[fld]) {
this.invaldateFields[fld] = true
allValdate && (allValdate = false)
}
})
if (allValdate) {
this.$emit('submit')
}
}
- onChangeValue()有输入时,去掉invalidate.
changeValue (key, val) {
if (this.invaldateFields[key] && val) {
this.invaldateFields[key] = false
}
this.$emit('updateValue', key, this.lang, val)
},
5 在输入组件中加入根据isInvalid,调整样式。
<input
:type="type"
:value="modelValue"
:placeholder="placeholder"
:class="{'form-control': true, 'is-invalid': isInvalid}"
...