element ui表单验证原理

1.获取用户传的rules进行验证,主要是安装了async-validator插件。
2.点击提交按钮验证所有表单,主要是触发了父组件el-form的validate,validate会查找所有el-form-item,然后调用el-form-item的validate。
el-form.vue

methods:{
        validate(cb){
            let r = this.$broadcast('elFormItem').every(item=>item.validate());
            cb(r)
        }
    }

broadcast的写法

Vue.prototype.$broadcast = function(componentName, name) {
    let children = this.$children; // 子组件
    let arr = [];
    function find(children) {
        children.forEach(child => {
            if (child.$options.name == componentName) {
                arr.push(child);
                if(name){
                  child.$emit(name)
                }
            }
            if (child.$children) {
                find(child.$children);
            }
        })
    }
    find(children);
    return arr
}

3.通过rules里设置的trigger去触发验证的话,实际上是靠子组件,比如el-input进行发布订阅。然后触发el-form-item的validate
el-input.vue

<template>
  <input type="text" :value="value" @input="handleInput" />
</template>

<script>
export default {
  name: "elInput",
  props: {
    value: String,
  },
  methods: {
    handleInput(e) {
        this.$emit('input',e.target.value)
        this.$dispatch('elFormItem','changeValue');
    },
  },
};
</script>

el-form-item.vue

 mounted() {
    this.$on("changeValue", () => {
      // 需要获取最新的值检测是否合法, 去全部数据中通过prop进行查找
      this.validate();
    });
  }

dispatch的写法

// 告诉组件触发自己身上的哪个方法
Vue.prototype.$dispatch = function(componentName, name) {
    let parent = this.$parent; // 父组件 不能是原生dom
    while (parent) {
        if (componentName == parent.$options.name) {
            break;
        } else {
            parent = parent.$parent;
        }
    }
    if (parent && name) {
        parent.$emit(name)
    }
    return parent;
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI 提供了强大的表单验证功能,可以轻松地对表单进行验证。下面是一个简单的示例,演示了如何使用 Element UI 进行表单验证: 1. 首先,确保你已经正确引入了 Element UI 库和样式文件。 2. 在表单中添加需要验证的字段,例如: ```html <el-form ref="myForm" :model="formData" :rules="formRules" label-width="100px"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="formData.password"></el-input> </el-form-item> <!-- 其他表单字段 --> </el-form> ``` 3. 在 Vue 组件中,定义表单数据和验证规则: ```javascript data() { return { formData: { username: '', password: '', // 其他表单字段 }, formRules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, // 其他自定义验证规则 ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, // 其他自定义验证规则 ], // 其他表单字段的验证规则 } } } ``` 4. 在提交表单时,调用验证方法 `validate`,例如: ```javascript methods: { submitForm() { this.$refs.myForm.validate((valid) => { if (valid) { // 表单验证通过,可以进行提交操作 } else { // 表单验证失败,提示用户错误信息 } }); } } ``` 以上示例演示了如何使用 Element UI 进行简单的表单验证。你可以根据实际需求,添加更多的验证规则和自定义错误提示信息。更多详细的用法和配置,请参考 Element UI 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值