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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| rules:表示的是表单规则 model 为绑定数据 ref 绑定控件,$refs 获取控件 ref 是接收dom数据的属性, 而:model就是要接受的数据本身 <template> <el-form ref="ruleFormRef" :model="ruleForm" status-icon :rules="rules" label-width="120px" class="demo-ruleForm" > <el-form-item label="Password" prop="pass"> <el-input v-model="ruleForm.pass" type="password" autocomplete="off" /> </el-form-item> <el-form-item label="Confirm" prop="checkPass"> <el-input v-model="ruleForm.checkPass" type="password" autocomplete="off" /> </el-form-item> <el-form-item label="Age" prop="age"> <el-input v-model.number="ruleForm.age" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)" >Submit</el-button > <el-button @click="resetForm(ruleFormRef)">Reset</el-button> </el-form-item> </el-form> </template>
<script lang="ts" setup> import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus'
const ruleFormRef = ref<FormInstance>()
const checkAge = (rule: any, value: any, callback: any) => { if (!value) { return callback(new Error('Please input the age')) } setTimeout(() => { if (!Number.isInteger(value)) { callback(new Error('Please input digits')) } else { if (value < 18) { callback(new Error('Age must be greater than 18')) } else { callback() } } }, 1000) }
const validatePass = (rule: any, value: any, callback: any) => { if (value === '') { callback(new Error('Please input the password')) } else { if (ruleForm.checkPass !== '') { if (!ruleFormRef.value) return ruleFormRef.value.validateField('checkPass', () => null) } callback() } } const validatePass2 = (rule: any, value: any, callback: any) => { if (value === '') { callback(new Error('Please input the password again')) } else if (value !== ruleForm.pass) { callback(new Error("Two inputs don't match!")) } else { callback() } }
const ruleForm = reactive({ pass: '', checkPass: '', age: '', })
const rules = reactive<FormRules>({ pass: [{ validator: validatePass, trigger: 'blur' }], checkPass: [{ validator: validatePass2, trigger: 'blur' }], age: [{ validator: checkAge, trigger: 'blur' }], })
const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return formEl.validate((valid) => { if (valid) { console.log('submit!') } else { console.log('error submit!') return false } }) }
const resetForm = (formEl: FormInstance | undefined) => { if (!formEl) return formEl.resetFields() } </script>
|