Vue(二十二)——表单校验

<template>
    <div id="xx">
        <h1>xx信息查询</h1>
        <a-form-model
                ref="form"                               //form并不是自定义的任何data或者methods,不明白为什么要加上这句。
                :label-col="{ span: 4 }"
                :wrapper-col="{span:12,offset:1}"
                :rules="formRules"                       //该表单使用什么校验规则,自己在data中定义。每条校验规则的名字一定要跟表单绑定的对象的名字一摸一样,才能说明校验的是那个对象。
                :model="formData"
                       >
            <a-form-model-item
                    label="查询类型"
                    prop="queryTypeData"                           
//在每个item中定义该item中需要检验的字段,以及该字段名字所对应的校验规则。只能是这个字段的名字,因为这个字段的名字会出现在两个地方,一个是formRules,一个是formData,所以这里只写这个名字,不加前面的前缀。在这里formRules和formData中使用同样的名字可以省却写两遍,一个是写要检验的字段名字,一个是写该字段的校验规则࿰
### Vue3 中二次封装 Form 表单组件的最佳实践 #### 1. 基本结构设计 为了实现高效且易于维护的表单组件,在构建之初应遵循一定的原则。考虑到特性的复用以及命名规范的重要性,推荐创建名为 `FormPanel` 的组件来作为基础模板[^2]。 ```html <template> <el-form :model="formData" ref="formRef"> <!-- 动态渲染表单--> <div v-for="(item, index) in formCfg" :key="index"> <component :is="getComponent(item.type)" v-bind="item.props" v-model="formData[item.prop]" /> </div> <!-- 提交按钮区域 --> <slot name="actions"></slot> </el-form> </template> ``` 此部分代码展示了如何通过遍历配置数组 `formCfg` 来动态生成不同类型的输入控件,并允许外部传入额外的操作按钮以增强灵活性。 #### 2. 配置项解析 对于每一个字段而言,可以通过传递给子组件的对象来进行详细的设定。这些对象包含了诸如标题 (`title`)、初始状态(`editForm`) 和验证规则 (`formRules`) 等属性[^1]。 ```javascript const props = defineProps({ title: { type: String, required: true }, show: Boolean, refName: String, editForm: Object, formRules: Array, labelPosition: { // 可选值 'left', 'right' type: String, default: "top", }, formCfg: Array, formAction: Array }); ``` 上述 JavaScript 定义了父级向 `FormPanel` 发送的数据模型及其预期格式;其中特别注意的是 `labelPosition` 属性指定了标签相对于输入框的位置,默认设置为顶部对齐方式。 #### 3. 方法与事件处理 为了让使用者能够更加便捷地控制表单行为,还需提供一系列实用的方法和监听器。例如: - **resetFields()**: 清除所有已填写的内容并重置错误提示; - **validate(callback)**: 执行完整的校验流程并将结果反馈给调用者。 ```typescript import { ElMessage } from 'element-plus'; // ...其他导入语句... setup(props, context){ const formRef = ref(null); function resetFields(){ if(formRef.value !== null){ formRef.value.resetFields(); } } async function validate(cb?:Function){ try{ await formRef.value.validate((valid:boolean)=>{ cb && cb(valid); }); }catch(error){ console.error('Validation failed:', error); ElMessage.warning('Please check your input!'); } } return { resetFields, validate }; } ``` 这段 TypeScript 实现了两个核心函数——用于初始化界面状态的 `resetFields()` 和负责触发整个表单检验过程的异步方法 `validate()` 。当遇到不符合条件的情况时会给出相应的警告信息。 #### 4. 插槽机制的应用 最后但同样重要的一点是在适当的地方预留插槽(slot),以便于开发者可以根据实际需求灵活调整布局或增加特殊功能模块。比如可以在底部放置一组自定义的动作按钮,从而满足更多样化的应用场景要求。 ```html <!-- 默认情况下只展示关闭按钮 --> <div slot-scope="{ closeDialog }"> <button @click="closeDialog">Cancel</button> <button @click="handleSubmit()">Submit</button> </div> ``` 以上便是关于在 Vue3 上进行表单组件二次开发的一个较为全面的例子介绍。希望这能帮助理解如何有效地组织代码逻辑,同时保持良好的扩展性和易读性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值