vue中实现表单校验

前提条件:vue-cli创建一个项目,安装async-validator(npm i async-validator -S)

  1. 在components中新建FormTest.vue组件,并在App.vue中引入。
    一个form表单需要form、formItem、input,初步代码如下:
    formTest:

    <template>
        <div>
            form表单
            <hr />
            <k-form>
                <k-form-item label="用户名">
                    <k-input v-model="model.username"></k-input>
                </k-form-item>
                <k-form-item label="密码" prop="password">
                    <k-input type="password" v-model="model.password"></k-input>
                </k-form-item>
            </k-form>
        </div>
    </template>
    <script>
    import KForm from "./KForm.vue"
    import KInput from "./KInput.vue"
    import KFormItem from "./KFormItem.vue"
    export default {
        components: {
            KForm,
            KInput,
            KFormItem
        },
        data() {
            return {
                // 数据模型
                model: { username: "tom", password: "" },
            }
        },
    }
    </script>
    <style>
    
    </style>
    

    input:

    <template>
      <div>
        <input :type="type" :value="value">
      </div>
    </template>
    
    <script>
    export default {
      props: {
        type: {
          type: String,
          default: "text"
        },
        value: {
          type: String,
          default: ""
        }
      },
      methods: {
        
      }
    };
    </script>
    
    <style>
    </style>
    

    formItem:

    <template>
      <div>
        <label v-if="label">{{label}}</label>
        <!-- 插槽 -->
        <slot></slot>
        <!-- 校验错误信息 -->
        <p v-if="errorMessage" class="error">{{errorMessage}}</p>
      </div>
    </template>
    
    <script>
    // import Validator from "async-validator";
    
    export default {
        props: ["label"],
        data() {
            return {
                errorMessage: '',
            }
        }
    };
    </script>
    
    <style scoped>
    .error {
      color: red;
    }
    </style>
    

    form:

    <template>
      <div>
        <slot></slot>
      </div>
    </template>
    
    <script>
    export default {
      
    };
    </script>
    
    <style>
    </style>
    
    1. 在input中定义input事件,通知老爹发生了input事件
      this.$emit("input", e.target.value);

    我们在KForm中使用provide,将表单实例跨层级传递给子孙

    provide() {
    	return {
    		form: this		// 表单实例传递给后代
    	}
    },
    props: {
        model: { type: Object, required: true },
        rules: { type: Object }
      },
    

    这样我们可以在form标签上使用model(数据模型)、 rules(校验规则)。
    我们在KFormItem中实行校验,在KInput中通知父组件进行校验:
    this.$parent.$emit("validate")
    KFormItem组件中监听validate,
    import Validator from "async-validator"

    created() {
    	this.$on("validate", this.validate)
    },
    methods: {
    	validate() {			// 执行校验函数
    	}
    }
    

    我们使用 async-validator 的校验规则写validate,我们用jnject注入KForm传过来的form实例

    inject: ["form"]
    
    // 校验规则制定
        const descriptor = { [this.prop]: this.form.rules[this.prop] };
        // 创建校验器
        const validator = new Validator(descriptor);
        // 执行校验
        validator.validate(
          { [this.prop]: this.form.model[this.prop] },
          errors => {
            if (errors) {
              // 显示错误信息
              this.errorMessage = errors[0].message;
              resolve(false);
            } else {
              this.errorMessage = "";
              resolve(true);
            }
          }
        );
    

    完成验证,上面为学习代码,
    具体代码:https://github.com/wwjhzc/asyncValidator

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3 的动态表单校验可以通过使用内置的校验器和自定义校验规则来实现。我们可以在表单输入的候对输入的内容进行校验,然后给出相应的提示信息。 首先,我们可以利用 Vue 3 的响应式特性来实监听表单输入的变化。可以使用 `v-model` 指令将表单的值与 Vue 实例的数据进行绑定。 其次,Vue 3 提供了内置的校验器,可以用于检查常见的表单规则,例如必填、长度范围等。可以通过在表单元素上使用 `v-bind` 指令来绑定校验规则。在编写校验规则,我们可以利用正则表达式来实现更复杂的校验逻辑。 除了内置的校验器外,我们还可以自定义校验规则。可以使用 `watch` 监听表单值的变化,并根据需要编写校验逻辑。在校验过程,可以根据校验结果来给出相应的提示信息。 在表单提交,可以通过调用校验方法来进行整体校验。可以遍历表单的所有字段,逐一进行校验,并将校验结果保存在一个对象校验结果可以用于在页面上显示相应的提示信息,或者阻止表单的提交。 综上所述,Vue 3 的动态表单校验可以通过使用响应式特性、内置的校验器和自定义校验规则来实现。这样可以方便地对表单进行实校验,并给出相应的提示信息。在实际应用,可以根据具体的场景和需求,选择合适的校验方式和规则。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值