先吐槽一下,个人感觉element-ui提供的文档写的太少,用的时候会踩很多坑。

如:表单验证方法 传入的value没有值  等。

下面,是我对element-ui  form表单验证使用的总结,应该能解决大部分问题,或者,也可以直接拿过去修改使用。

(本文代码使用的是 vue.js + element-ui)

要写人名、年龄信息的表单校验(人的数量用户可自己增减)

1. el-form 上,model绑定的数据必须是json对象格式

(不一定说“必须”,只有是json对象格式的时候,element-ui提供的校验方法功能才完全可用)

 

2. el-form-item 上,prop绑定的值必须可以通过  .  的方式从el-form上的model绑定的对象中找到。

例: input绑定的是name,el-form上的model绑定的是formData,他们的关系是formData.list[0].name

        所以,prop绑定的值应该是字符串:list[0].name

        只有这样写,校验方法rule_name传入的value才是输入框中的值。

 3.  提交按钮要写在el-form-item中,提交方法要用element-ui提供的方法,这样,element-ui会在提交前进行表单校验

下面是代码

<style scoped>
.align{
    display: flex;
    align-items: center;
}
.alignT{
    display: flex;
    align-items: flex-start;
}
.iconBtn{
    color: #409EFF;
    font-size: 26px;
    cursor: pointer;
}
</style>

<template>
    <div>
        <el-form :model="formData" ref="formData" status-icon style="width:100%;">
            <!-- 参数输入 -->
            <el-row>信息输入:</el-row>
            <el-row :gutter="30">
                <el-col :span="20">
                    <el-row 
                        :gutter="20" 
                        v-for="(item,index) in formData.list"
                        :key="index"
                        class="alignT spaceTop1">
                        <el-col :span=".5">
                            <i class="iconBtn" @click="listMethod(index)" :class="{'el-icon-circle-plus-outline': index == 0,'el-icon-remove-outline': index>0}" style="margin-top:6px;"></i>
                        </el-col>
                            <el-col :span="10">
                                <el-form-item :prop="'list[' + index + '].name'" :rules="{validator: rule_name,trigger: 'blur'}">
                                    <el-input placeholder="请输入名称" v-model="item.name" auto-complete="off"></el-input>
                                </el-form-item>
                            </el-col>
                            <el-col :span="4">
                                <el-form-item  :prop="'list[' + index + '].age'"  :rules="{validator: rule_age,trigger: 'blur'}">
                                    <el-input placeholder="请输入年龄" v-model="item.age" auto-complete="off"></el-input>
                                </el-form-item>
                            </el-col>
                    </el-row>
                </el-col>
            </el-row>

            <!-- 按钮 -->
            <el-row>
                <el-col :span=".5">
                    <el-form-item>
                        <el-button type="primary" @click="submit('formData')">提交</el-button>
                    </el-form-item>
                </el-col>
            </el-row>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: 'elementForm',            /* element-ui表单验证 */
        data() {
            return {
                formData: {
                    list: [{name: '',age: ''}]
                }
            };
        },
        mounted() {
        },
        methods: {
            // 表单增减操作
            listMethod(n) {
                if (n > 0) {
                    this.formData.list.splice(n,1);
                }else{
                    let o = {name: '',age: ''};
                    this.formData.list.push(o);
                };
            },
            // 姓名校验方法
            rule_name(rule,value,callback) {
                console.log(value);
                // 姓名不能为空
                if (!value) {
                    return callback(new Error('请输入姓名'));
                };
                callback();
            },
            // 年龄校验方法
            rule_age(rule,value,callback) {
                if (!value) {
                    return callback(new Error('请输入年龄'));
                };

                let n = Number(value);

                if (n < 1) {
                    return callback(new Error('年龄不能小于1岁'));
                };

                if (n > 200) {
                    return callback(new Error('年龄不能大于200岁'));
                };

                callback();
            },
            // 提交
            submit(formName) {
                this.$refs[formName].validate((valid) => {
                    if (!valid) {
                        // 验证不通过禁止提交
                        console.log('验证不通过');
                        return false;
                    };

                    console.log('验证通过');
                });
            }
        }
    };
</script>

 

GitHub 加速计划 / eleme / element
10
1
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:4 个月前 )
c345bb45 8 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 8 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐