Vue 的表单校验validate()函数

学element的时候看到一段代码,主要内容是实现表单提交功能,包括表单校验、提交、处理响应结果以及相应的用户提示。代码和我查询资料以及所带的疑问点如下:

deptFormRef 的定义

const dept=ref({name:''});

const deptFormRef = ref();

const save = async () => {
  // 表单校验
  if (!deptFormRef.value) return;
  deptFormRef.value.validate(async (valid) => { // valid 表示是否校验通过,true 表示通过,false 表示不通过
    if (valid) {
      const result = await addApi(dept.value);
      if (result.code) { // 成功
        // 提示信息
        ElMessage.success('操作成功');
        // 关闭对话框
        dialogFormVisible.value = false;
        // 查询
        search();
      } else {
        ElMessage.error(result.msg);
      }
    } else { // 不通过
      ElMessage.error('表单校验不通过');
    }
  });
};
  • ref() 是 Vue 3 的响应式 API,用于创建一个响应式引用。在这里,它用于存储表单元素的引用。

  • deptFormRef 用于获取表单组件实例,以便后续进行表单校验。

问题一:为什么const deptFormRef = ref();就能够获取表单组件实例,这里不是直接定于一个空的ref类型吗?

  • 表单校验 :调用 deptFormRef.value.validate() 方法进行表单校验。这个方法会根据表单的校验规则检查用户输入是否合法。

问题二:validate()函数返回的是true和false,这里他是用什么进行比较得到true或false?

  • 校验通过 :如果校验通过(validtrue),则调用 addApi(dept.value) 发送请求到后端,添加新部门。

    • 如果后端返回的成功标志 result.code 存在且为成功状态:

      • 使用 ElMessage.success 显示成功提示。

      • 关闭对话框,通过设置 dialogFormVisible.value = false

      • 调用 search() 方法刷新部门列表。

    • 如果后端返回的不是成功状态,则使用 ElMessage.error 显示错误信息。

  • 校验不通过 :如果校验不通过(validfalse),则显示错误提示 “表单校验不通过”。

表单模板

<el-form :model="dept" :rules="rules" ref="deptFormRef">
  <el-form-item label="部门名称" label-width="80px" prop="name">
    <el-input v-model="dept.name"></el-input>
  </el-form-item>
</el-form>
  • el-form :Element Plus 的表单组件,用于创建表单。

    • :model="dept" :将表单数据绑定到 dept 对象。

    • :rules="rules" :定义表单的校验规则。

    • ref="deptFormRef" :将表单组件实例绑定到 deptFormRef,以便在 JavaScript 中获取表单实例。

  • el-form-item :表单项组件,表示表单中的一个字段。

    • label="部门名称" :设置表单项的标签文本。

    • label-width="80px" :设置标签的宽度。

    • prop="name" :将表单项与 rules 中的校验规则关联,指定校验规则对应的字段。

  • el-input :表单输入框组件,用于输入部门名称。

    • v-model="dept.name" :将输入框的值双向绑定到 dept.name

思考良久之后也是大致对代码有了猜想,如果有不对的地方希望可以指正一下。

问题一:为什么const deptFormRef = ref();就能够获取表单组件实例,这里不是直接定于一个ref的变量吗?

我的理解是定义一个deptFormRer用于接收表单组件实例,就是直接定义一个ref的变量,但当组件渲染后,<el-form> 组件的实例就会被赋值给 deptFormRef.value,从而我们可以使用这个实例来调用其方法,如 validate 方法进行表单校验。

<el-form :model="dept" :rules="rules" ref="deptFormRef">...</el-form>

就是将这个表单实例通过ref="deptFormRef"绑定起来,也就是说现在的deptFormRef就是现在这个表单组件实例,包含了数据dept和规则rules,当然它不仅仅是数据 dept 和规则 rules。

问题二:validate()函数返回的是true和false,这里他是用什么进行比较得到true或false?

表单实例通过ref="deptFormRef"绑定实例获取了数据dept和规则rules,validate就是将数据和规则进行对比,看数据是否符合规则,符合返回true,不符合返回false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值