antd vue + ts(vue-property-decorator) 表单至少二选一非空检验

该博客介绍了如何在Vue.js应用中使用A-Form-Model组件进行表单验证,确保`name`或`enName`字段至少有一个非空。通过在rules属性中使用逻辑运算符&&来动态添加required规则,并监听`addForm`对象的`name`和`enName`变化,触发校验以消除错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:name与enName至少二选一非空检验

<a-form-model
        ref="addForm"
        :model="addForm"
        :label-col="{ span: 24 }"
        :wrapper-col="{ span: 24 }"
        :rules="rules"
      >
        <a-form-model-item :label="$t('name')" prop="name">
          <a-auto-complete
            v-model="addForm.name"
            :data-source="dataSource"
            @select="nameSelect"
            @search="onNameSearch"
            @change="onAutoChange"
          />
        </a-form-model-item>
        <a-form-model-item :label="$t('enName')" prop="enName">
          <a-input v-model="addForm.enName" :disabled="isDisabled" />
        </a-form-model-item>
        <a-form-model-item :label="$t('email')" prop="email">
          <a-input v-model="addForm.email" :disabled="isDisabled" />
        </a-form-model-item>
        <a-form-model-item :label="$t('employeeType')" prop="employeeType">
          <a-select @change="handleChange" v-model="addForm.employeeType">
            <a-select-option value="供应商">
              {{ $t("supplier") }}
            </a-select-option>
            <a-select-option value="其他"> {{ $t("else") }} </a-select-option>
          </a-select>
        </a-form-model-item>
      </a-form-model>
public get rules() {
    return {
      name: [
        {
          message: this.$tc("nameInvaild"),
          max: 50,
          min: 1,
          whitespace: true,
        },
        !this.addForm.enName && {
          required: true,
          message: this.$tc("nameTip"),
        },
      ],
      enName: [
        {
          message: this.$tc("enNameInvaild"),
          pattern: /^[a-zA-Z\s]{1,50}$/,
          whitespace: true,
        },
        !this.addForm.name && { required: true, message: this.$tc("nameTip") },
      ],
      email: [
        { required: true, message: this.$tc("emailInvaild"), type: "email" },
      ],
      employeeType: [{ required: true, message: this.$tc("pleaseSelect") }],
    };
  }

还需要监听一下change事件

@Watch("addForm.enName", { immediate: true, deep: true })
  public onEnNameChange(val): void {
    let item = this.$refs.addForm as any;
    item.validateField("name", (valid) => {});
  }

  @Watch("addForm.name", { immediate: true, deep: true })
  public onNameChange(val): void {
    let item = this.$refs.addForm as any;
    item.validateField("enName", (valid) => {});
  }

总结:采用 &&在rules里判断是否添加require,当某一项输入内容时,触发Watch校验另一项内容即可消除提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值