Ant vue中表单验证(动态校验、部分校验)

这篇具有很好参考价值的文章主要介绍了Ant vue中表单验证(动态校验、部分校验)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提:写了超级复杂的表单,其中涉及了很多表单验证的地方,现一一记录一下;
ant-vue 版本1.7.8
vue 版本2.6.11
校验的原理大体相似,灵活应用!!

1.动态校验

需求:
1根据读写方式去动态自动校验规则;
2.只是监听挂载路径,但因嵌套太多,表单监听的表单域不满足自动监听的条件,需要关联表单域,使其根据校验规则自动生成;

(ant表单组件中Form.Item 会对唯一子元素进行劫持,并监听 blur 和 change 事件,来达到自动校验的目的,所以请确保表单域没有其它元素包裹。如果有多个子元素,将只会监听第一个子元素的变化。)

如下图:只读时会出现校验,不挂载时则不会出现校验;
Ant vue中表单验证(动态校验、部分校验)
Ant vue中表单验证(动态校验、部分校验)

//主要代码逻辑:
<template>
    <a-form-model ref="mountForm" :model="mountFormData">
        <div v-for="(item, index) in mountFormData.mountItem" :key="item.name">
            <a-form-model-item :ref="'mountPath' + index" :prop="'mountItem.' + index + '.mountPath'" :rules="[
                  {
                    required: item.type != 'isNull',
                    message: '请指定读写方式及挂载路径。',
                    trigger: 'blur'
                  },
                  {
                    required: item.type != 'isNull',
                    validator: vaildMountPath,
                    trigger: 'blur'
                  }
                ]">
                <a-row type="flex" justify="space-around" align="middle">
                    <a-col :span="8"> </a-col>
                    <a-col :span="8">
                        <a-select style="width: 98%" v-model="item.type">
                            <a-select-option value="isAll">读写</a-select-option>
                            <a-select-option value="isRead">只读</a-select-option>
                            <a-select-option value="isNull">不挂载</a-select-option>
                        </a-select>
                    </a-col>
                    <a-col :span="8">
                        <a-input :disabled="item.type == 'isNull'" placeholder="挂载路径" v-model="item.mountPath" @blur="
                        () => {
                          $refs[`mountPath${index}`][0].onFieldBlur()
                        }
                      ">
                        </a-input>
                    </a-col>
                </a-row>
            </a-form-model-item>
        </div>
    </a-form-model>
</template>
<script>
    export default {
        data() {
            const vaildMountPath = (rule, value, callback) => {
                //校验逻辑
                if (value) {
                 //新增名称是否已经存在——修改名称过滤掉本身等操作
                } else {
                    callback()
                }

            };
            return {
                vaildMountPath,
            };
        },
    };
    //去掉校验可以用——this.$refs.mountForm.resetFields()
</script> 

实现动态校验重点:

  1. :prop=“‘mountItem.’ + index + ‘.mountPath’”,要不根本找不到校验不了;
  2. 关联表单域,在你需要校验的地方,使用 @blur,@change进行关联;本问是对挂在路径的input进行校验的,因为嵌套的太多,无法触发自动校验固进行关联
    @blur="
    () => {
    r e f s [ ‘ m o u n t P a t h refs[`mountPath refs[mountPath{index}`][0].onFieldBlur()
    }
    ">

2.部分校验

因业务需求需分步对表单进行校验,所以需要使用部分校验功能;
本例如图, 点击下一步时,只对名称、版本进行校验;
Ant vue中表单验证(动态校验、部分校验)

//主要代码逻辑:
<script>
    export default {
        methods: {
            next() {
                //需要定义一个成功校验标识
                let isError = false
                this.$refs.ruleForm.validateField(['name', 'version'], valid => {
                    if (valid) {
                        isError = true
                    }
                })
                if (!isError) {
                    //校验成功之后的逻辑
                }
            },
        },
    };
</script>

validateField方法中callback回调的时错误信息,故需要定义一个成功标识!!根据成功标识去写你校验成功的逻辑

总结:
1.多看官方文档;
2.多写多总结,无论时动态校验还是普通校验——prop和绑定的值要保持一致,这样才能实现规则校验。动态校验 多用于处理数组对象,模板上使用v-for,所以我写的时候都会把规则写在模板里,而不是data里,如果有好的实现希望有心人能告诉我,谢谢!!文章来源地址https://www.toymoban.com/news/detail-451609.html

到了这里,关于Ant vue中表单验证(动态校验、部分校验)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包