vue antd的from表单中验证rules中type的坑

3 篇文章 1 订阅
3 篇文章 0 订阅

vue antd的from表单中验证rules中type的坑

总结在最后哟~

我的代码如下:

 <a-form
        ref="formRef"
        :model="detailState"
        layout="horizontal"
        :labelCol="{ span: 6 }"
        :wrapperCol="{ span: 14 }"
        :rules="rules"
      >
        <a-form-item label="分组" name="groupId">
          <a-select v-model:value="detailState.groupId">
            <a-select-option
              v-for="item in groupsList"
              :key="item.id"
              :value="item.id"
              >{{ item.groupName }}
            </a-select-option>
          </a-select>
        </a-form-item>
        ...
 </a-from>
const detailState = reactive({
      groupId: "",
      ...
});

const rules = {
      groupId: [
        {
          required: true,
          message: "分组必填",
          trigger: "change",
        },
      ],
 }

明明选择的里面有数据,但是还是会校验出来
在这里插入图片描述
报错如下:
在这里插入图片描述
参考官网中的:
在这里插入图片描述

// 官网代码
<a-form-item label="Activity zone" name="region">
   <a-select v-model:value="formState.region" placeholder="please select your zone">
     <a-select-option value="shanghai">Zone one</a-select-option>
     <a-select-option value="beijing">Zone two</a-select-option>
   </a-select>
 </a-form-item>

// 官网代码
const rules = {
      region: [
        {
          required: true,
          message: 'Please select Activity zone',
          trigger: 'change',
        },
      ],
      ...
}

感觉并没有什么区别,看到其他人用到了type,类型是array;我也就试了试:

const rules = {
      groupId: [
        {
          required: true,
          message: "分组必填",
          trigger: "change",
          type: "array",
        },
      ]
}

但是依然报错
在这里插入图片描述
我想我的 groupId 定义的类型是 string ,而 type 的默认值也是string,为什么会报错呢,而看别人类似的代码,用的 array ,我把 groupId 的类型也改成数组后,还是报错。实在不理解…

虽然感觉到是一个小问题,但是自己就是尝试了很多,也看了别人的,最终没解决,最后问了大佬后,得知,这里的type校验的是<a-select-option/>value的值。

由于我得到的 item.id 是 number 类型,所以最后需要在 rules 中写的 type 为 number 即可。

 const rules = {
      groupId: [
        {
          required: true,
          message: "分组必填",
          trigger: "change",
          type: "number",
        },
      ]
 }

这样就不会报错了。
在这里插入图片描述

总结

rules中的type校验的是select中得到的值,也就是value的值,当value为字符串时,type的默认值就为string,就可以不写(官方的例子中就是这样)。当不为string时就需要写类型,这里就用的是number。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Vue3和Ant Design Vue进行表单验证的示例: ```vue <template> <a-form :form="form" @finish="handleSubmit"> <a-form-item label="名称" name="name" :rules="nameRules"> <a-input v-model="form.name" /> </a-form-item> <a-form-item label="对比项" name="compare" :rules="compareRules"> <a-input v-model="form.compare" /> </a-form-item> <a-form-item label="备注" name="remark" :rules="remarkRules"> <a-input v-model="form.remark" /> </a-form-item> <a-button type="primary" html-type="submit">提交</a-button> </a-form> </template> <script> import { defineComponent, ref } from 'vue'; import { Form, Input, Button } from 'ant-design-vue'; export default defineComponent({ components: { 'a-form': Form, 'a-form-item': Form.Item, 'a-input': Input, 'a-button': Button, }, setup() { const form = ref(null); const nameRules = [ { required: true, message: '名称不能为空' }, ]; const compareRules = [ { required: true, message: '对比项不能为空' }, ]; const remarkRules = [ { required: true, message: '备注不能为空' }, ]; const handleSubmit = () => { form.value.validate((valid) => { if (valid) { // 表单验证通过,执行提交操作 console.log('表单验证通过'); } else { console.log('表单验证失败'); } }); }; return { form, nameRules, compareRules, remarkRules, handleSubmit, }; }, }); </script> ``` 这个示例,我们使用了Vue3的`defineComponent`和`ref`函数来定义组件和创建响应式数据。我们还引入了Ant Design Vue表单组件,包括`Form`、`FormItem`、`Input`和`Button`。 在模板,我们使用`a-form`组件来创建表单,并将表单对象绑定到`form`变量上。每个表单项都使用`a-form-item`组件包裹,并设置相应的`name`和`rules`属性来进行验证。当点击提交按钮时,我们调用`handleSubmit`方法来进行表单验证,如果验证通过,则执行提交操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值