Vant 中使用van-dialog嵌套表单验证

1,150 阅读1分钟

需求描述

  • 点击操作弹窗显示后,我填写一个表单,表单校验通过后,再调用api接口,返回成功后,关闭弹窗。

遇到的问题

  • 点击确定时,无论表单验证通过不通过表单都会默认关闭

解决

查阅官方文档发现dialog中有一个参数可以去阻止默认关闭

微信图片_20230315141449.png

<van-dialog
      v-model="showPicker"
      title="标题"
      @confirm="confirm"
      @cancel="showPicker =false"
      :beforeClose="onBeforeClose"
      show-cancel-button
>
    <van-form ref="formData">
        <van-field
            v-model="formData.realName"
            required
            label="姓名"
            input-align="right"
            placeholder="请输入姓名"
            :rules="[{ required: true, message: '请输入姓名!', trigger: 'onBlur' }]"
        />
    </van-form>
</van-dialog>
methods: {
  confirm() {
  this.$refs.formData.validate().then(() => {
    this.showPicker= false // 表单验证通过后手动关闭弹框
    ...
  }).catch(() => {
    ...
  })
},
  // 取消默认关闭弹框事件
  onBeforeClose(action, done) {
    return done(false)
  },
}

结尾

  • 这样就可先进行表单验证,验证成功后才会关闭弹框