uni-app中ui-form表单校验select存在问题
uni-app中ui-form表单校验select存在问题
<uni-forms ref="calcForm" :modelValue="formData" :rules="rules" :label-width="200">
<uni-forms-item
label="性别"
name="sex"
required
:rules="[{ required: true, message: '请选择性别' }]"
>
<uni-data-select v-model="formData.sex" :localdata="sexRange"></uni-data-select>
</uni-forms-item>
校验无效果,直接跳出成功,不选中无所谓
1 回复
在uni-app中使用ui-form进行表单校验时,针对select组件的校验确实可能会遇到一些问题。这通常是因为select组件的校验逻辑需要特别处理,尤其是在获取选中值以及触发校验事件方面。以下是一个示例代码,展示了如何在uni-app中正确配置和使用ui-form对select组件进行校验。
首先,确保你的项目中已经安装了uni-ui
库,并在页面中引入了相关组件。
<template>
<view>
<ui-form ref="form" :rules="rules" @validate="handleValidate">
<ui-form-item label="选择项" prop="selectValue">
<picker mode="selector" :range="options" v-model="formData.selectValue" @change="handlePickerChange">
<view class="picker">{{ options[formData.selectValue] || '请选择' }}</view>
</picker>
</ui-form-item>
<button type="primary" @click="submitForm">提交</button>
</ui-form>
</view>
</template>
<script>
export default {
data() {
return {
formData: {
selectValue: -1, // 初始值设为无效选项,便于校验
},
options: ['选项1', '选项2', '选项3'],
rules: {
selectValue: [
{ required: true, message: '请选择一项', trigger: 'change' },
],
},
};
},
methods: {
handlePickerChange(e) {
this.formData.selectValue = e.detail.value;
// 手动触发校验
this.$refs.form.validateField('selectValue');
},
handleValidate(valid) {
if (valid) {
uni.showToast({ title: '校验通过', icon: 'success' });
} else {
uni.showToast({ title: '校验失败', icon: 'none' });
}
},
submitForm() {
this.$refs.form.validate((valid) => {
if (valid) {
uni.showToast({ title: '提交成功', icon: 'success' });
} else {
uni.showToast({ title: '请先完成表单校验', icon: 'none' });
return false;
}
});
},
},
};
</script>
<style scoped>
.picker {
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
</style>
在这个示例中,我们使用picker
组件模拟select选择框,并通过监听change
事件来更新formData.selectValue
。重要的是,在handlePickerChange
方法中,我们手动触发validateField
方法来对select字段进行校验。这样确保了每次选择改变后,校验逻辑都能正确执行。同时,在提交表单时,通过validate
方法对整个表单进行校验。