vue3+vant4父组件点击提交并校验子组件form表单

先看效果

代码如下

父组件

复制代码
<template>
  <ChildForm ref="childFormRef" />
  <button @click="validateForm">校验表单</button>
</template>
<script setup>
import { ref } from 'vue';
import ChildForm from './ChildForm.vue';
const childFormRef = ref(null);
const validateForm = async () => {
  if (childFormRef.value) {
    try {
      const isValid = await childFormRef.value.validate();
      console.log('Form valid:', isValid);
    } catch (error) {
      console.error('Validation error:', error);
    }
  }
};
</script>

子组件

复制代码
<!-- ChildForm.vue -->
<template>
    <van-form ref="formRef">
      <!-- 表单项 -->
      <van-field label="账号" name="账号" v-model="pageList.fieldValue" :rules="rules" />
      <van-field
      v-model="pageList.password"
      label="密码"
      name="密码"
      type="password"
      placeholder="请输入密码"
      :rules="[{ required: true, message: '请输入密码' }]"
    />
    </van-form>
  </template>
  <script setup>
  import { ref, defineExpose } from 'vue';
  const formRef = ref(null);
  let pageList = ref({
    fieldValue:'',
    password:'',
  })
  const rules = ref([
    { required: true, message: 'This field is required' }
  ]);
  
  const validate = async () => {
    if (formRef.value) {
      try {
        await formRef.value.validate();
        return true;
      } catch (error) {
        return false;
      }
    }
    return false;
  };
  defineExpose({ validate });
  </script>

父组件通过ref获取子组件的引用,在父组件的点击事件中调用子组件的validate方法进行表单验证,如果验证通过则执行提交逻辑。子组件通过defineExpose暴露其validate方法给父组件使用。这样父组件就可以通过childForm.value.validate调用子组件的验证方法了。

相关推荐
写代码的皮筏艇9 分钟前
React中的'插槽'
前端·javascript
xhxxx9 分钟前
一个空函数,如何成就 JS 继承的“完美方案”?
javascript·面试·ecmascript 6
韩曙亮9 分钟前
【Web APIs】元素可视区 client 系列属性 ② ( 立即执行函数 )
前端·javascript·dom·client·web apis·立即执行函数·元素可视区
像素水藻码10 分钟前
Vue3 源码学习笔记(一):环境搭建与初识Monorepo
vue.js
羊羊小栈11 分钟前
基于「YOLO姿态识别 + AI大模型分析」的智能健身辅助系统(vue+flask+AI算法)
vue.js·人工智能·yolo·毕业设计·创业创新·大作业
秋邱12 分钟前
AR 技术创新与商业化新方向:AI+AR 融合,抢占 2025 高潜力赛道
前端·人工智能·后端·python·html·restful
一只一只妖12 分钟前
Taro+Vue3+TS+Vite 小程序开发底座搭建流程
vue.js·小程序·taro
随笔记13 分钟前
uniapp开发app使用海康威视播放监控视频流如何使用以及遇到了什么问题
vue.js·uni-app·视频编码
www_stdio13 分钟前
JavaScript 原型继承与函数调用机制详解
前端·javascript·面试
羽沢3116 分钟前
vue3 + element-plus 表单校验
前端·javascript·vue.js