赞
踩
model 表单数据对象
rules 验证对象
prop model 的键名
<template> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules"> <el-form-item label="手机号" prop="mobile"> <el-input v-model="ruleForm.mobile" /> </el-form-item> <el-form-item label="密码" prop="pass"> <el-input v-model="ruleForm.pass" type="password" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)">提交</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 phoneRegular = /^1[23456789]\d{9}$/; const ruleFormRef = ref<FormInstance>(); const ruleForm = reactive({ mobile: "", pass: "", }); function customMobile(_: any, value: any, callback: any) { if (phoneRegular.test(value)) callback(); else callback(new Error("请输入正确的手机号")); } const rules = reactive<FormRules<typeof ruleForm>>({ mobile: [ { required: true, message: "请输入手机号", trigger: ["blur", "change"] }, // 正则 { pattern: phoneRegular, message: "请输入正确的手机号", trigger: ["blur", "change"] }, // 自定义验证 { validator: customMobile, trigger: ["blur", "change"] }, ], pass: [{ required: true, message: "请输入密码", trigger: ["blur", "change"] }], }); const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate((valid) => { if (valid) { console.log("submit!"); } else { console.log("error submit!"); return false; } }); }; </script>
const phoneRegular = /^1[23456789]\d{9}$/;
const rules = reactive<FormRules<typeof ruleForm>>({
mobile: [
// 正则
{ pattern: phoneRegular, message: "请输入正确的手机号", trigger: ["blur", "change"] },
]
});
const phoneRegular = /^1[23456789]\d{9}$/;
function customMobile(_: any, value: any, callback: any) {
if (phoneRegular.test(value)) callback();
else callback(new Error("请输入正确的手机号"));
}
const rules = reactive<FormRules<typeof ruleForm>>({
mobile: [
// 自定义验证
{ validator: customMobile, trigger: ["blur", "change"] },
]
});
<template> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules"> <el-form-item label="手机号" prop="mobile"> <el-input v-model="ruleForm.mobile" /> </el-form-item> <el-form-item label="密码" prop="user.pass"> <el-input v-model="ruleForm.user.pass" type="password" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button> </el-form-item> </el-form> </template> <script lang="ts" setup> const ruleForm = reactive({ mobile: "", user: { pass: "", }, }); const rules = reactive<FormRules<typeof ruleForm>>({ mobile: [{ required: true, message: "请输入手机号", trigger: ["blur", "change"] }], "user.pass": [{ required: true, message: "请输入密码", trigger: ["blur", "change"] }], }); </script>
<template> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules"> <el-form-item label="图片" prop="images"> <div>请选择图片</div> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button> <el-button type="primary" @click="ruleForm.images.push('http:')">追加 images {{ ruleForm.images }}</el-button> </el-form-item> </el-form> </template> <script lang="ts" setup> import { reactive, ref } from "vue"; import type { FormInstance, FormRules } from "element-plus"; interface RuleForm { images: string[]; } const ruleFormRef = ref<FormInstance>(); const ruleForm: RuleForm = reactive({ images: [], }); const rules = reactive<FormRules<typeof ruleForm>>({ images: [ { required: true, message: "请上传图片", trigger: ["blur", "change"] }, // 定义类型必填 array ,数组 length 必须为 2 { type: "array", len: 2, message: "请上传两张图片", trigger: ["blur", "change"] }, // 验证数组范围 2-4 { type: "array", min: 2, max: 4, message: "请上传2-4张图片", trigger: ["blur", "change"] }, ], }); const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate((valid) => { if (valid) { console.log("submit!"); } else { console.log("error submit!"); return false; } }); }; </script>
import type { FormInstance } from 'element-plus';
const ruleFormRef = ref<FormInstance>();
const ruleForm = reactive({
mobile: "",
pass: "",
});
ruleFormRef?.value?.validateField(['mobile'], flag => {
// flag true 全部验证通过, false 验证不通过
})
// 验证多个写法
ruleFormRef?.value?.validateField(['mobile','pass'], flag => {})
动态修改 rules,而不是修改 prop
<template> <el-form ref="ruleFormRef" :model="ruleForm"> <el-form-item label="手机号" prop="mobile" :rules="flag ? rules['mobile'] : ruleEmpty"> <el-input v-model="ruleForm.mobile" /> </el-form-item> <el-form-item label="密码" prop="pass" :rules="flag ? rules['pass'] : ruleEmpty"> <el-input v-model="ruleForm.pass" type="password" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button> <el-button type="primary" @click="flag = !flag">切换 flag {{ flag }}</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 ruleForm = reactive({ mobile: "", pass: "", }); const flag = ref(true); const ruleEmpty = { required: false }; const rules = reactive<FormRules<typeof ruleForm>>({ mobile: [{ required: true, message: "请输入手机号", trigger: ["blur", "change"] }], pass: [{ required: true, message: "请输入密码", trigger: ["blur", "change"] }], }); const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate((valid) => { if (valid) { console.log("submit!"); } else { console.log("error submit!"); return false; } }); }; </script>
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。