• vue2+element-ui实现一个注册表单


    vue2+element-ui实现一个注册表单

    element-ui表单

    client/src/views/Register.vue中插入表单:

    <template>
        <div class="register">
            <section class="form_container">
                <div class="manage_tip">
                    <span class="title">Kisu Management Platform</span>
                    <el-form :model="registerUser" :rules="rules" ref="registerForm" label-width="80px" class="registerForm">
                        <el-form-item label="用户名" prop="name">
                            <el-input v-model="registerUser.name" placeholder="请输入用户名"></el-input>
                        </el-form-item>
                        <el-form-item label="邮箱" prop="email">
                            <el-input v-model="registerUser.email" placeholder="请输入邮箱地址"></el-input>
                        </el-form-item>
                        <el-form-item label="密码" prop="password">
                            <el-input type="password" v-model="registerUser.password" placeholder="请输入密码"></el-input>
                        </el-form-item>
                        <el-form-item label="确认密码" prop="password2">
                            <el-input type="password" v-model="registerUser.password2" placeholder="请再次输入密码"></el-input>
                        </el-form-item>
                        <el-form-item label="选择身份">
                            <el-select v-model="registerUser.identity" placeholder="请选择身份">
                                <el-option label="经理" value="manager"></el-option>
                                <el-option label="员工" value="employee"></el-option>
                            </el-select>
                        </el-form-item>
                        <el-form-item>
                            <el-button typeof="primary" class="submit_btn" @click="submitForm('registerForm')">注册</el-button>
                        </el-form-item>
                    </el-form>
                </div>
            </section>
        </div>
    </template>
    
    <script>
        export default {
        name: "register",
        components: {}
        };
    </script>
    
    <style scoped>
        .register {
            position: relative;
            width: 100%;
            height: 100%;
            background: url(../assets/bg.jpg) no-repeat center center;
            background-size: 100% 100%;
        }
        .form_container {
            width: 370px;
            height: 210px;
            position: absolute;
            top: 10%;
            left: 34%;
            padding: 25px;
            border-radius: 5px;
            text-align: center;
        }
    
        .form_container .manage_tip .title {
            font-family: "Microsoft YaHei";
            font-weight: bold;
            font-size: 26px;
            color: #fff;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    打开http://localhost:8080/register会发现看不到任何内容。查看浏览器控制台有如下报错:

    [Vue warn]: Property or method "registerUser" is not defined on the instance but referenced during render.
    
    • 1

    修改Register.vue中的script标签,定义registerUser属性:

    <script>
        export default {
        name: "register",
        components: {},
        data(){
          return {
            registerUser: {
              name: '',
              email: '',
              password: '',
              password2: '',
              identity: ''
            }
          }
        }
     };
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    刷新网页http://localhost:8080/register,可以看到表单。浏览器控制台只剩下如下报错:

    Property or method "rules" is not defined on the instance but referenced during render.
    
    • 1

    :如果中文显示乱码,用笔记本打开vue文件,另存为UTF-8编码格式,然后替换掉原来的vue文件即可。

    修改表单样式

    修改Register.vue添加表单和按钮样式:

    <style scoped>
        .register {
            position: relative;
            width: 100%;
            height: 100%;
            background: url(../assets/bg.jpg) no-repeat center center;
            background-size: 100% 100%;
        }
        .form_container {
            width: 370px;
            height: 210px;
            position: absolute;
            top: 10%;
            left: 34%;
            padding: 25px;
            border-radius: 5px;
            text-align: center;
        }
    
        .form_container .manage_tip .title {
            font-family: "Microsoft YaHei";
            font-weight: bold;
            font-size: 26px;
            color: #fff;
        }
        .registerForm {
            margin-top: 20px;
            background-color: #fff;
            padding: 20px 40px 20px 20px;
            border-radius: 5px;
            box-shadow: 0px 5px 10px #cccc;
        }
    
        .submit_btn {
            width: 100%;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    表单内容验证

    修改Register.vue中的<script>标签,添加rules表单验证规则:

    <script>
        export default {
        name: "register",
        components: {},
        data() {
            var validatePass2 = (rule, value, callback) => {
                if (value === '') {
                    callback(new Error('请再次输入密码'));
                } else if (value !== this.registerUser.password) {
                    callback(new Error('两次输入密码不一致!'));
                } else {
                    callback();
                }
            };
    
            return {
                registerUser: {
                    name: '',
                    email: '',
                    password: '',
                    password2: '',
                    identity: ''
                },
                rules: {
                    name: [
                        {
                            required: true,
                            message: "用户名不能为空",
                            trigger: "blur"
                        },
                        {
                            min: 2,
                            max: 30,
                            message: "用户名长度在2至30个字符之间",
                            trigger: "blur"
                        }
                    ],
                    email: [
                        {
                            type: "email",
                            required: true,
                            message: "邮箱格式不正确",
                            trigger: "blur"
                        }
                    ],
                    password: [
                        {
                            required: true,
                            message: "密码不能为空",
                            trigger: "blur"
                        },
                        {
                            min: 6,
                            max: 30,
                            message: "密码长度在6至30个字符之间",
                            trigger: "blur"
                        }
                    ],
                    password2: [
                        {
                            validator: validatePass2,
                            trigger: "blur"
                        }
                    ]
                }
            }
        }
     };
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    修改Register.vue中的script标签,添加点击按钮时触发的submitForm方法:

    <script>
        export default {
        name: "register",
        components: {},
        data() {
            var validatePass2 = (rule, value, callback) => {
                if (value === '') {
                    callback(new Error('请再次输入密码'));
                } else if (value !== this.registerUser.password) {
                    callback(new Error('两次输入密码不一致!'));
                } else {
                    callback();
                }
            };
    
            return {
                registerUser: {
                    name: '',
                    email: '',
                    password: '',
                    password2: '',
                    identity: ''
                },
                rules: {
                    name: [
                        {
                            required: true,
                            message: "用户名不能为空",
                            trigger: "blur"
                        },
                        {
                            min: 2,
                            max: 30,
                            message: "用户名长度在2至30个字符之间",
                            trigger: "blur"
                        }
                    ],
                    email: [
                        {
                            type: "email",
                            required: true,
                            message: "邮箱格式不正确",
                            trigger: "blur"
                        }
                    ],
                    password: [
                        {
                            required: true,
                            message: "密码不能为空",
                            trigger: "blur"
                        },
                        {
                            min: 6,
                            max: 30,
                            message: "密码长度在6至30个字符之间",
                            trigger: "blur"
                        }
                    ],
                    password2: [
                        {
                            validator: validatePass2,
                            trigger: "blur"
                        }
                    ]
                }
            }
         },
         methods: {
             submitForm(formName) {
                 this.$refs[formName].validate(valid => {
                     if (valid) {
                         alert('submit!');
                     } else {
                         console.log('error submit!!');
                         return false;
                     }
                 });
             }
         }
     }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    References
    【1】Element表单组件

  • 相关阅读:
    Scrum的五个核心价值观
    如何在 Endless OS 上安装 ONLYOFFICE 桌面编辑器 7.5
    《前端》笔记整合
    Docker安装Oracle18c 坑已排完,放心食用
    FPGA优质开源项目 – UDP万兆光纤以太网通信
    126. SAP UI5 进阶 - JSON 模型字段里的值,显示在最终 UI5 界面上的奥秘分析
    互联网场景下人脸服务基线方案总结
    Java对接拼多多开放平台API(加密上云等全流程)
    只需要高中数学知识就可以入门计算机图形学啦
    性能测试知识
  • 原文地址:https://blog.csdn.net/Sebastien23/article/details/125472528