uni-app uni-forms 调用 validate 方法后页面崩溃问题

uni-app uni-forms 调用 validate 方法后页面崩溃问题

操作步骤:

uni-forms 调用 validate 方法后导致页面崩溃的问题,问题浮现请下载附件进行运行。其中重复密码和新的密码填写不一致触发自定义表单验证方法后,页面出现崩溃信息弹框。

预期结果:

触发自定义表单验证后的验证失败不会引起页面的崩溃操作

实际结果:

重复密码和新的密码填写不一致触发自定义表单验证方法后,页面出现崩溃信息弹框。

bug描述:

uni-forms 调用 validate 方法后导致页面崩溃的问题,问题浮现请下载附件进行运行。其中重复密码和新的密码填写不一致触发自定义表单验证方法后,页面出现崩溃信息弹框。

信息类型 信息内容
产品分类 uniapp/H5
PC开发环境 Windows
操作系统版本 Windows 11 家庭中文版 版本 23H2 安装日期 ‎2024/‎1/‎22 操作系统版本 22631.3007
浏览器平台 Chrome
浏览器版本 版本 121.0.6167.160(正式版本) (64 位)
项目创建方式 CLI
CLI版本号 ^2.0.2-3090920231225001

uni-forms-validate-error.zip


更多关于uni-app uni-forms 调用 validate 方法后页面崩溃问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

很抱歉过年期间打扰大家

更多关于uni-app uni-forms 调用 validate 方法后页面崩溃问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


demo示例里面存在重复验证,将nPassword里面的校验去掉即可 nPassword: {
rules: [
{ required: true, errorMessage: “新密码不能为空” },
{
pattern:
'^(?=.[0-9].)(?=.[A-Z].)(?=.[a-z].)(?=.[~!@$%^&*()_\\-+=<>.?:"{}].*).{8,20}$', errorMessage: "密码格式不正确", }, { validateFunction: (rule, value, data, callback) => { if ( !/^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*)(?=.*[~!@$%^&()_-+=<>.?:"{}].*).{8,20}$/.test(
value
)
) {
return callback(“密码格式不正确”);
}
//将下面这个重复验证注释掉或删除
// if (this.formData.rPassword) {
// this.$refs.form.validateField(“rPassword”);
// }
return callback();
},
},
],
},

在使用 uni-app 的 uni-forms 组件时,调用 validate 方法后页面崩溃,可能是由于以下几个原因导致的。你可以根据以下步骤进行排查和解决:


1. 检查 uni-forms 组件的 ref 是否正确

确保你在 uni-forms 组件上正确设置了 ref,并且在调用 validate 方法时引用了正确的 ref

<template>
  <uni-forms ref="form">
    <!-- 表单内容 -->
  </uni-forms>
</template>

<script>
export default {
  methods: {
    validateForm() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          console.log('验证通过');
        } else {
          console.log('验证失败');
        }
      });
    },
  },
};
</script>

如果 ref 设置错误或未设置,调用 validate 方法时可能会导致页面崩溃。


2. 检查表单字段的 name 属性

uni-forms 的验证依赖于表单字段的 name 属性。确保每个需要验证的表单字段都正确设置了 name 属性。

<uni-form-item label="用户名" name="username">
  <input v-model="formData.username" />
</uni-form-item>

如果 name 属性缺失或重复,可能会导致验证逻辑出错,进而引起页面崩溃。


3. 检查 rules 规则是否配置正确

uni-forms 的验证规则通过 rules 属性配置。确保 rules 的格式正确,并且与表单字段的 name 属性对应。

<template>
  <uni-forms :rules="rules" ref="form">
    <uni-form-item label="用户名" name="username">
      <input v-model="formData.username" />
    </uni-form-item>
  </uni-forms>
</template>

<script>
export default {
  data() {
    return {
      formData: {
        username: '',
      },
      rules: {
        username: {
          rules: [
            { required: true, errorMessage: '用户名不能为空' },
          ],
        },
      },
    };
  },
};
</script>

如果 rules 配置错误,可能会导致验证方法执行时崩溃。


4. 检查 validate 方法的回调函数

validate 方法需要一个回调函数作为参数。确保回调函数存在并且逻辑正确。

this.$refs.form.validate((valid) => {
  if (valid) {
    console.log('验证通过');
  } else {
    console.log('验证失败');
  }
});

如果回调函数未定义或逻辑有误,可能会导致页面崩溃。


5. 检查 uni-app 版本

某些版本的 uni-app 可能存在 uni-forms 组件的兼容性问题。尝试更新 uni-app 到最新版本,或者检查是否有已知的 bug。


6. 调试和日志

validate 方法调用前后添加日志,检查是否有异常抛出。

console.log('开始验证');
this.$refs.form.validate((valid) => {
  console.log('验证结果:', valid);
});

如果页面崩溃时控制台有报错信息,可以根据报错信息进一步排查问题。


7. 尝试捕获异常

如果问题仍然存在,可以尝试使用 try-catch 捕获异常,防止页面崩溃。

try {
  this.$refs.form.validate((valid) => {
    if (valid) {
      console.log('验证通过');
    } else {
      console.log('验证失败');
    }
  });
} catch (error) {
  console.error('验证过程中发生错误:', error);
}
回到顶部