文档地址 : https://www.uviewui.com/components/form.html
文档已经很详细了,但是在使用过程中,遇见了 验证不灵敏的情况 :
- 用户修改了 输入内容,但是form校验并没有更新提示。
- 添加校验方式 ,完全不能监听到输入,触发form校验。
代码如下:
<u-form :model="supervisoryForm" ref="uForm">
<view class="form_item">
<u-form-item prop="handleContent" :border-bottom="false">
<u-input
v-model="supervisoryForm.handleContent"
label-width="0"
placeholder="请输入督办内容"
:border-bottom="false"
type="textarea"
maxlength="300"
height="400"
:trim="true"
:placeholder-style="{
background: '#f8f9fb',
color: '#b2b2b2',
'font-size': '28rpx',
'line-height': '40rpx',
}"
:custom-style="{
position: 'relative',
background: '#f8f9fb',
padding: '16rpx 20rpx',
height: '400rpx',
'padding-bottom': '50rpx',
}"
></u-input>
<view class="remand_text">如需上传文件附件,请至PC端处理</view>
</u-form-item>
<u-form-item
label="督办对象"
prop="handleOrgId"
:label-width="140"
:required="true"
>
<organization-for-projectId
:projectId="curPjId"
v-model="supervisoryForm.handleOrgId"
/>
</u-form-item>
<u-form-item>
<u-button type="primary" @click="validateUForm" :loading="saveLoading"
>提交</u-button>
</u-form-item>
</view>
</u-form>
<script>
data() {
return {
supervisoryForm: {
handleContent: "",
handleOrgId: null,
saveLoading:false,
},
rules:{
handleContent: [
{
required: true,
message: "请输入督办内容",
trigger: ["change","blur"],
},
],
handleOrgId: [
{
required: true,
message: "请选择督办对象",
trigger: ["change"],
type: "number",
},
],
}
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods:{
validateUForm() {
this.$refs.uForm.validate((valid) => {
if (valid) {
// 校验通过后执行函数
}
});
},
}
</script>
排查很久,到最后发现是自定义的表单组件,在rules配置项里面,没有配置 type 参数项,导致的form验证失灵 ( 文档并没有写明必须配置 ,但是不配置会出现问题)
使用From 组件需要注意到的点:
- form 标签 需要使用ref 绑定 【ref=”uForm”】 在校验时 使用 【this.$refs.uForm.validate】 验证
- 需要在 【onReady】声明周期 配置rules 【this.$refs.uForm.setRules】
- u-form-item标签需要添加 prop属性,并且属性值和 内部的表单v-model绑定的值一致
- 当表单校验不生效的时候 可以尝试给rules配置 type值
- @input + : value 相当于 v-model