返回

Element UI 表单验证数字类型提示 "xx is not a string" 的终极解决方法

前端

引子

在使用 Element UI 的过程中,很多开发者在表单验证时遇到了数字类型提示“xx is not a string”的困扰。本文将深入剖析此问题的根源,并提供针对性的解决方案,帮助开发者轻松解决此问题。

问题根源

此问题的根源在于 Element UI 表单验证规则中的一个未明确说明的细节。当使用 v-model.number 指令对数字类型字段进行校验时,如果校验规则中包含 target: 'blur',则会出现上述提示。

解决方案

要解决此问题,需要移除校验规则中的 target: 'blur'。具体步骤如下:

  1. 在表单元素上找到相关的 v-model 指令,确保其包含 .number 后缀,如:<input v-model.number="form.age">
  2. 在同一元素上找到相关的校验规则,如:<form-item label="年龄" prop="age">
  3. 移除校验规则中的 target: 'blur',如:<form-item label="年龄" prop="age" :rules="[...rule]">

实例代码

以下是一个经过修改的实例代码:

<template>
  <form-item label="年龄" prop="age">
    <input v-model.number="form.age" />
    <div v-for="rule in rules" :key="rule.name">
      <span>{{ rule.message }}</span>
    </div>
  </form-item>
</template>
<script>
import { Form, FormItem } from 'element-ui';

export default {
  components: { Form, FormItem },
  data() {
    return {
      form: { age: '' },
      rules: [
        { required: true, message: '请输入年龄' },
        { type: 'number', message: '请输入正确的数字' }
      ]
    };
  }
};
</script>

结论

通过移除校验规则中的 target: 'blur',可以有效解决 Element UI 表单验证数字类型提示“xx is not a string”的问题。理解此问题的根源并掌握正确的解决方法,能够帮助开发者避免在表单验证中遇到此类问题,从而提升开发效率和用户体验。