uni-app uni-ui的uni-forms组件使用时校验失效

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app uni-ui的uni-forms组件使用时校验失效

操作步骤

运行附件demo

预期结果

校验成功

实际结果

校验失效,form-item组件在init时无法拿到this.form

bug描述

uni-ui的uni-forms作为组件使用时,校验失效,uni-form-item 无法拿到inject的form

项目 信息
产品分类 uniapp/小程序
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 windows10
HBuilderX类型 正式
HBuilderX版本号 4.36
第三方开发者工具版本号 4.2.5
基础库版本号 3.49.0.7
项目创建方式 HBuilderX

4 回复

请问您解决了吗,遇到了同样的问题 https://ask.dcloud.net.cn/question/204116

无人响应,既然用了uniapp就做好进坑的打算,有问题自己解决吧,估计一年以后说不定官方能看到

在使用uni-app的uni-ui库中的uni-forms组件时,如果遇到校验失效的问题,通常可能是由于校验规则配置不当或者事件绑定不正确导致的。以下是一个示例代码,展示了如何正确使用uni-forms组件及其校验功能。

首先,确保你已经正确安装并引入了uni-ui库。在你的pages.jsonmain.js中引入uni-ui组件库。

// pages.json 示例(按需引入)
"easycom": {
    "autoscan": true,
    "custom": {
        "^u-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
    }
}

接下来,在你的页面组件中,配置uni-forms和校验规则:

<template>
    <view>
        <uni-forms ref="formRef" :rules="rules" @validate="onValidate">
            <uni-forms-item label="用户名" name="username" required>
                <uni-input v-model="form.username" placeholder="请输入用户名"></uni-input>
            </uni-forms-item>
            <uni-forms-item label="邮箱" name="email" required>
                <uni-input v-model="form.email" type="email" placeholder="请输入邮箱"></uni-input>
            </uni-forms-item>
            <view>
                <button @click="submitForm">提交</button>
            </view>
        </uni-forms>
    </view>
</template>

<script>
export default {
    data() {
        return {
            form: {
                username: '',
                email: ''
            },
            rules: {
                username: [
                    { required: true, message: '用户名是必填项', trigger: 'blur' },
                    { min: 3, max: 20, message: '用户名长度在3到20个字符之间', trigger: 'blur' }
                ],
                email: [
                    { required: true, message: '邮箱是必填项', trigger: 'blur' },
                    { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' }
                ]
            }
        };
    },
    methods: {
        submitForm() {
            this.$refs.formRef.validate((valid) => {
                if (valid) {
                    uni.showToast({ title: '提交成功', icon: 'success' });
                } else {
                    uni.showToast({ title: '校验失败,请检查输入', icon: 'none' });
                    return false;
                }
            });
        },
        onValidate(valid, fields) {
            console.log('校验结果:', valid, fields);
        }
    }
};
</script>

上述代码中,我们定义了表单数据form和校验规则rules,并在uni-forms组件中通过ref属性引用表单实例。在提交表单时,通过调用this.$refs.formRef.validate方法进行校验。如果校验通过,则显示成功提示;否则,显示失败提示。

确保你的uni-app和uni-ui库是最新版本,以避免已知的bug或兼容性问题。如果问题仍然存在,请检查控制台是否有错误信息,或者尝试简化表单和校验规则以逐步定位问题。

回到顶部