iview模态框设置loading后表单验证失败无法清除loading状态

iview 模态框设置 loading 后表单验证失败无法清除 loading 状态

在使用 iview 模态框过程中我们使用确定按钮异步提交信息,提交成功后才关闭模态框,但我们发现若无法通过表单验证,禁止提交时,确定按钮的 loading 状态无法清除,无法修改表单后再次提交信息。官方文档中也没有关于这一点的说明,查阅官方 issue 后发现了解决方案。即先将loading状态设置为false,再使用this.$nextTick在下次将loading状态设置为true。

<template>
  <Modal :loading="modalLoading" @on-ok="submitForm">
    <form ref="form"></form>
  </Modal>
</template>
<script>
  export default {
    name: "test",
    data() {
      return {
        modalLoading: true
      };
    },
    methods: {
      // 改变loading状态函数
      changeLoading() {
        // 将loading状态设置为关闭
        this.modalLoading = false;
        // 下次模态框加载时重置loading状态为true
        this.$nextTick(() => {
          this.modalLoading = true;
        });
      },
      // 点击确定执行的函数
      submitForm() {
        // iview表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            console.log("表单验证成功,异步执行确定请求");
          } else {
            // 表单验证失败时重置loading状态
            this.changeLoading();
          }
        });
      }
    }
  };
</script>