ant-design-vue 图片上传实时校验

通过一个歪门邪道的方式可以实现在表单内的a-upload发生实时校验,首先写一个antUploadImg.vue组件,dom内容大致如下:

<a-upload 
    name="file" 
    :customRequest="handleCustomRequest"
    :before-upload="handleBeforeFileUpload" 
    :showUploadList="true" 
    list-type="picture-card" 
    v-bind="$attrs"
    v-model:file-list="fileList" 
    @change="handleChange" 
    @preview="handlePictureCardPreview">
      <div v-if="fileList?.length < $attrs.maxCount">
        <plus-outlined />
        <div class="ant-upload-text">Upload</div>
      </div>
</a-upload>

然后是antUploadImg.vue组件内比较关键的部分,就是一旦绑定的fileList的值改变了,要通过change事件传递出去,(请注意,computed值,只能改变,比如改变数组用push,不能直接重新赋值,它的本质是依赖的值变了就跟随变化,变了之后就会触发所依赖值的set方法):

const emits = defineEmits(['update:value','change']);

const fileList = computed({
  get: () => props.value,
  set: (val) => {
    emits('update:value', val)
    emits('change', val)
  },
});

在自定义的上传方法handleCustomRequest里,拿到上传的接口返回值之后,更新fileList:

// 上传成功拿到返回值之后

fileList.value.push(res.data);
emits('change', fileList.value)

在要使用的地方引入,(最好换个名字,免得跟antd自带的组件名重复了):

import UploadImgs from '@/components/Upload/antUploadImg'

使用的地方,dom写法:

<a-form-item 
   label="活动封面图" 
   name="coverImg"
   :rules="[{ required: true, 
      validator: validateCoverImg, trigger: 'change' 
   }]">
     <UploadImgs v-model:value="editFormVal.coverImg" :maxCount="1"></UploadImgs>
</a-form-item>

自定义校验方法,注意点已经注释说明了

const validateCoverImg = async (rule, value) => {
    if (value.length == 0) {
        // 其实此时可能上传过了,图片也返回了,只是length仍未更新。
      return new Promise((resolve, reject) => {
        // 这里一定要有定时器,因为antd上传组件的数据更新有点迟
        setTimeout(() => {
          if (value.length) {
            resolve();
          }else{
            reject('请上传封面图');
          }
        }, 1500);
      });
    } else {
      editFormRef.value.clearValidate('coverImg')
      return Promise.resolve();
    }
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Vue 是一个非常受欢迎的 UI 组件库,它提供了丰富的表单组件,包括输入框、下拉选择框等等。要实现动态添加表单必填校验,可以按照以下步骤进行操作: 1. 首先,引入 Ant Design Vue 的 Form 组件和相应的验证规则模块,例如 `required` 必填规则。 2. 在 Vue 的 data 中定义一个表单对象,包含需要动态添加的表单控件的值。 3. 在模板中使用 Ant Design Vue 的 Form 组件,并使用 v-model 指令将表单对象和控件的值进行绑定。 4. 使用 v-for 指令遍历需要动态添加的表单控件,通过一个数组来提供控件的模板。 5. 在表单控件的模板中,使用 :rules 属性绑定验证规则,例如 `:rules="[{ required: true, message: '该字段为必填项' }]` 6. 在模板中提供一个按钮或其他交互方式,用来触发动态添加表单控件的操作。 7. 当点击按钮时,通过修改表单对象的属性或者添加新的属性,实现动态添加表单控件。 8. 提交表单时,通过调用 validate 方法对表单进行校验,这会触发相关的验证规则。 9. 根据校验结果,可以在模板中展示错误信息或者处理其他逻辑。 需要注意的是,动态添加表单必填校验时,需要在动态添加表单控件的同时,将相应的验证规则也添加到表单对象中。另外,为了方便校验和错误信息的展示,建议使用对应的验证规则模块和提示文本。 这样,通过上述步骤,就可以实现 Ant Design Vue 动态添加表单必填校验了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值