el-form表单验证的一些方法总结

Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。

知识点

  • 根据文档说明,model为表单的数据对象,el-form通过model绑定数据。
  • rules为表单验证规则对象,其中字段名要与model中的字段名一一对应
  • el-form-item 容器,通过 label 绑定标签,prop属性设置为需要验证的字段名
  • 表单组件通过 v-model 绑定 model 中的数据

表单校验相关属性

  • hide-required-asterisk:是否隐藏必填字段的标签旁边的红色星号(隐藏必录标识)
  • inline-message:是否以行内形式展示校验信息(验证消息是否在一行显示)

方式一 无表单嵌套

以一般的form表单为例

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" 
class="demo-ruleForm">
    <el-form-item label="活动名称" prop="name"> 
        <el-input v-model="ruleForm.name"></el-input> 
    </el-form-item>
<el-form>

一般在vue中这样来写,就可以对表单进行验证。

data(){
    return {
        ruleForm: { name: '' },
        rules: {
            name: [ 
                { required: true, message: '请输入活动名称', trigger: 'blur' }, 
                { min: 3, max: 5, message: '长度在 35 个字符', trigger: 'blur' } 
            ]
        }
    }
},

如果有一些复杂的验证规则,也可以选择自定义验证, validator

data() {
 const userValidator = (rule, value, callback) => {
    if (value.length > 3) {
      callback()
    } else {
      callback(new Error('用户名长度必须大于3'))
    }
  }
  return {}
}
rules: {
      user: [
        { validator: userValidator, trigger: 'change' }
      ]
    }

方式二 表单嵌套

嵌套的表单,一般业务场景是,有一些表单项需要按照条件显示或者隐藏,data里面的model数据可能会是对象里面套对象的,el-form也同样支持嵌套的验证,写法一般如下:

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" 
class="demo-ruleForm">
    <el-form-item label="活动名称"> 
        <el-input v-model="ruleForm.name"></el-input>
        <el-form-item prop="info.name"> 
            <el-input v-model="ruleForm.info.name"></el-input>

        </el-form-item>
    </el-form-item>
<el-form>

data(){
    return {
           ruleForm: {
                info: {
                    name: ''
                }
            },
    }
}


rules里面同样也可以这样写

rules: {
      info: {
          name: [{ required: true, message: '请选择', trigger: 'change' }],
      }
    }

方式三 动态表单验证

  • 除了在 Form 组件上一次性传递所有的验证规则外还可以在单个的表单域上传递属性的验证规则.
  • 动态添加form-item的时候,可以使用
<el-form-item prop="email" label="邮箱" 
:rules="[ { required: true, message: '请输入邮箱地址', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] } ]" >
 <el-input v-model="ValidateForm.email"></el-input> 
 </el-form-item>

方式四 动态添加校验规则

根据条件判断是否需要某种验证规则时,一个简单的使用场景就是,通过不同的type去显示不同的错误信息。

const message =
      this.type === 'addFirst'
        ? '请输入一级名称'
        : this.type === 'addChild'
        ? '请输入二级名称'
        : this.type === 'addThree' && this.editChannelItem
        ? '请选择三级名称'
        : '请输入三级名称';
    const validatorHandle = (rule, value, callback) => {
      if (value) {
        callback();
      } else {
        callback(new Error(message));
      }
    };
    const newRule = [...this.formInfoRules.name, { validator: validatorHandle, trigger: 'blur' }];
    this.formInfoRules = Object.assign({}, this.formInfoRules, { name: newRule });

方式五 手动控制校验状态

  • error错误信息
  • validate-status验证状态。 success 验证成功, error验证失败, validating验证中,’'未验证

这样使用:

<el-form-item
           
                :error="validateFormState.error"
                :validate-status="validateFormState.state"
              >
            </el-form-item>
            
  validateFormState = {
    periodSendDateError: '',
    periodSendDateStatus: 'success',
  };
  在验证成功或者失败的时候去手动控制error和validate-status的值即可。

### 如何在 `el-form` 中为 `el-tree` 组件配置和使用自定义验证规则 为了实现在 `Element UI` 的 `el-form` 表单中对 `el-tree` 组件应用验证规则,可以按照如下方法操作: #### 定义表单模型与初始状态 创建一个用于存储树形控件选中节点的数据字段,在初始化时设定为空或默认值。 ```javascript data() { return { form: { treeSelection: [] // 存储被选中的节点ID列表或其他标识符 }, rules: { /* 验证规则 */ } }; } ``` #### 设置验证规则 对于 `el-tree` 控件而言,通常会关注是否有选项被勾选。因此可以在 `rules` 属性下针对上述定义的 `treeSelection` 字段指定相应的校验逻辑[^1]。 ```javascript rules: { treeSelection: [ { required: true, message: '请选择至少一项', trigger: ['change'] } // 当触发条件满足时执行此条规则 ] }, ``` #### 自定义验证函数 如果需要更复杂的业务场景下的验证,则可以通过编写自定义验证器来完成特定需求。这允许开发者根据实际应用场景灵活调整验证行为。 ```javascript methods: { validateTree(value, callback) { if (this.form.treeSelection.length === 0) { callback(new Error('必须选择至少一个节点')); } else { // 进行其他复杂判断... callback(); } } } // 将其加入到rules里 rules: { treeSelection: [{ validator: this.validateTree, trigger: ['blur', 'change'] }] } ``` #### 使用 `el-tree` 和关联至 `el-form-item` 最后一步是在模板部分正确地将这些元素组合起来,并确保它们之间能够正常交互工作。 ```html <el-form :model="form" :rules="rules" ref="ruleForm"> <!-- ... --> <el-form-item label="树形结构:" prop="treeSelection"> <el-tree show-checkbox node-key="id" :default-checked-keys="form.treeSelection" @check-change="(nodeObj, checked) => handleCheckChange(nodeObj, checked)" :data="treeData"></el-tree> </el-form-item> <!-- ... --> </el-form> ``` 在此基础上还需要处理当用户改变选择时更新表单域的状态,即实现 `handleCheckChange()` 方法以便同步最新的选择情况给 `form.treeSelection` 变量。 ```javascript methods: { handleCheckChange(data, checked) { const selectedKeys = []; function traverse(nodes) { nodes.forEach((node) => { if (node.checked || (checked && data.id === node.id)) { selectedKeys.push(node.id); } if (node.children && node.children.length > 0) { traverse(node.children); } }); } traverse(this.$refs.ruleForm.getCheckedNodes()); this.form.treeSelection = [...new Set(selectedKeys)]; } } ``` 通过这种方式就可以有效地把 `el-tree` 节点的选择状况纳入整个表单提交前后的合法性检查流程之中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值