// *****注意这里的值是 name 不再是 porp****//
当前位置:   article > 正文

vue3 rules 验证框架的简单入门用法,快速上手

vue3 rules

1. ant-design-vue rules

  1. <template>
  2. // 定义 a-form 表单 添加 动态属性 :model 表单值属性 ,: rulse 表单验证属性
  3. <a-form
  4. ref="formRef"
  5. name="custom-validation"
  6. :model="formState"
  7. :rules="rules"
  8. >
  9. // *****注意这里的值是 name 不再是 porp****//
  10. <a-form-item label="Password" name="pass">
  11. <a-input v-model:value="formState.pass" type="password" />
  12. </a-form-item>
  13. <a-form-item label="Confirm" name="checkPass">
  14. <a-input v-model:value="formState.checkPass" type="password" />
  15. </a-form-item>
  16. <a-form-item label="Age" name="age">
  17. <a-input-number v-model:value="formState.age" />
  18. </a-form-item>
  19. <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
  20. <a-button type="primary" html-type="submit">Submit</a-button>
  21. </a-form-item>
  22. </a-form>
  23. </template>
  24. <script lang="ts">
  25. import type { Rule } from 'ant-design-vue/es/form';
  26. import { defineComponent, reactive } from 'vue';
  27. // 定义表单数据类型接口
  28. interface FormState {
  29. pass: string;
  30. checkPass: string;
  31. age: number | undefined;
  32. }
  33. export default defineComponent({
  34. setup() {
  35. // reactive定义 表单双向数据绑定
  36. const formState = reactive<FormState>({
  37. pass: '',
  38. checkPass: '',
  39. age: undefined,
  40. });
  41. // 自定义 表单验字段证方法
  42. let checkAge = (_rule: Rule, value: number) => {
  43. if (!value) {
  44. return Promise.reject('Please input the age');
  45. }
  46. setTimeout(() => {
  47. if (!Number.isInteger(value)) {
  48. return Promise.reject('Please input digits');
  49. } else {
  50. if (value < 18) {
  51. return Promise.reject('Age must be greater than 18');
  52. } else {
  53. return Promise.resolve();
  54. }
  55. },1000}
  56. };
  57. let validatePass = (_rule: Rule, value: string) => {
  58. if (value === '') {
  59. return Promise.reject('Please input the password');
  60. } else {
  61. if (formState.checkPass !== '') {
  62. }
  63. return Promise.resolve();
  64. }
  65. };
  66. let validatePass2 = (_rule: Rule, value: string) => {
  67. if (value === '') {
  68. return Promise.reject('Please input the password again');
  69. } else if (value !== formState.pass) {
  70. return Promise.reject("Two inputs don't match!");
  71. } else {
  72. return Promise.resolve();
  73. }
  74. };
  75. // 定义 rules 验证属性 这里Record<string, Rule[]> 是定义rules 数据类型为key value 链表数据,其中value 数据类型为Rule[]
  76. const rules: Record<string, Rule[]> = {
  77. pass: [{ required: true, validator: validatePass, trigger: 'change' }],
  78. checkPass: [{ validator: validatePass2, trigger: 'change' }],
  79. age: [{ validator: checkAge, trigger: 'change' }],
  80. };
  81. return {
  82. formState,
  83. rules
  84. };
  85. },
  86. });
  87. </script>

2. element-plus  rules

  1. <template>
  2. // 定义 el-form 定义 表单数据model,如果不定义这个 rules 是获取不到 验证字段的值的,定义rules 属性
  3. <el-form
  4. size="large"
  5. class="login-content-form"
  6. :model="ruleForm"
  7. :rules="rules"
  8. >
  9. // 注意这里的 form-item 属性是prop 与 ant 做区分
  10. <el-form-item class="login-animation1" prop="userName" >
  11. <el-input type="text" placeholder="账户" v-model="ruleForm.userName">
  12. </el-input>
  13. </el-form-item>
  14. <el-form-item class="login-animation2" prop="password">
  15. <el-input placeholder="密码" v-model="ruleForm.password" >
  16. </el-input>
  17. </el-form-item>
  18. <el-form-item class="login-animation3" prop="code">
  19. <el-col :span="15">
  20. <el-input type="text" maxlength="5" placeholder="验证码" v-model="ruleForm.code" >
  21. </el-input>
  22. </el-col>
  23. <el-col :span="1"></el-col>
  24. <el-col :span="8">
  25. <el-button class="login-content-code">
  26. <el-image style="width: 100px; " />
  27. </el-button>
  28. </el-col>
  29. </el-form-item>
  30. <el-form-item class="login-animation4">
  31. <el-button type="primary" class="login-content-submit" >
  32. <span>{{ "登录"}}</span>
  33. </el-button>
  34. </el-form-item>
  35. </el-form>
  36. </template>
  37. <script lang="ts">
  38. import { reactive, defineComponent} from 'vue';
  39. export default defineComponent({
  40. name: 'loginAccount',
  41. setup() {
  42. const ruleForm = reactive({
  43. userName: '',
  44. password: '',
  45. code: '',
  46. })
  47. // 验证验证码
  48. const checkCode=(rule: any, value: any, callback: any) => {
  49. console.log(value,"value")
  50. }
  51. // 自定义表单验证
  52. const rules = reactive({
  53. userName: [
  54. { required: true, message: '请输入账号', trigger: 'blur' },
  55. { min: 3, max: 5, message: '账号长度 在 3 到 5长度之间', trigger: 'blur' },
  56. ],
  57. password: [
  58. { required: true, message: '请输入密码', trigger: 'blur' },
  59. { min: 3, max: 5, message: '密码长度 在 3 到 5长度之间', trigger: 'blur' },
  60. ],
  61. code: [
  62. { required: true, message: '请输入验证码', trigger: 'blur' },
  63. { validator: checkCode, trigger: 'change' },
  64. ],
  65. })
  66. return {
  67. rules,
  68. ruleForm
  69. };
  70. },
  71. });
  72. </script>

注意:自定义验证表单方法时候不用使用 异步操作 async 否则会导致验证信息message 赋值(错误提示信息不显示)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/809071?site
推荐阅读
相关标签