elementui弹窗页按钮重复提交问题解决

文章讲述了在ruoyi平台中,弹出窗口的提交按钮连续点击导致重复提交的问题。首先尝试通过增加loading属性来防止,但未解决问题。最终解决方案是修改loading属性为loading||!open,确保在打开弹窗时禁用提交按钮。
摘要由CSDN通过智能技术生成

一、BUG场景

ruoyi平台,页面弹出窗有提交按钮,在提交时连续多次点击会发生重复提交。

二、错误方案

给按钮增加  :loading="submitLoading" 属性。

<el-dialog :title="title" :v-if="open" :visible.sync="open" @close="cancel" >
    <el-button type="primary" :loading="submitLoading" @click="submitForm">提交</el-button>
</el-dialog>


data() {
    return{
        open: false,
        submitLoading: false,
    }
},

methods: {

    cancel() {
      this.open = false;
      this.submitLoading = false;
    },
    /** 提交按钮 */
    submitForm() {
        ......
        this.submitLoading = true;
        this.api.add(formData).then(response => {
            .....
            this.cancel();
        });
    }
}

验证后发现并没有解决重复提交问题。

查询资料发现:el-dialog的关闭不是瞬间发生,是关闭动画,是动画,真是活久见了。侧面证明自己菜。

三、正确方案

给按钮增加  :loading="submitLoading||!open" 属性。

上面代码中只需要修改loading这一处就行了。

<el-dialog :title="title" :v-if="open" :visible.sync="open" @close="cancel" >
    <el-button type="primary" :loading="submitLoading||!open" @click="submitForm">提交</el-button>
</el-dialog>


data() {
    return{
        open: false,
        submitLoading: false,
    }
},

methods: {

    cancel() {
      this.open = false;
      this.submitLoading = false;
    },
    /** 提交按钮 */
    submitForm() {
        ......
        this.submitLoading = true;
        this.api.add(formData).then(response => {
            .....
            this.cancel();
        });
    }
}

按钮逻辑

行为按钮submitLoading弹窗open按钮状态
打开弹窗前falsefalse禁用
打开弹窗后falsetrue可用
数据请求前truetrue禁用
请求结束&关闭弹窗falsefalse禁用

### 回答1: 您可以使用 Element UI 提供的 Dialog 组件,它提供了一个模态对话框,可以帮助您快速构建出一个详情面。具体步骤如下:1. 在面中引入 Element UI 对话框组件; 2. 在模板中使用 <el-dialog> 标签; 3. 在 <el-dialog> 中添加您想要显示的详情,包括文字、图片等; 4. 在 <el-dialog> 中添加一个按钮来控制对话框的显示和隐藏; 5. 在控制器中绑定一个变量用来控制对话框的显示和隐藏。此外,Element UI 还提供了一些高级的功能,比如拖拽、模态框大小调整等,可以满足您的需求。 ### 回答2: elementui是一款基于Vue.js开发的UI框架,它提供了丰富的组件库,包括弹窗组件。 在elementui中,弹窗组件是Dialog组件。在实现详情面的弹窗时,我们可以使用Dialog组件来创建一个弹窗,并在弹窗中展示需要的内容。 首先,在Vue的template中引入Dialog组件并设置相应的属性,如标题、宽度、是否可见等。然后,在弹窗的内容区域中,我们可以根据需求添加表格、表单、图片等元素,以展示相关的详细信息。 在弹窗的底部,我们可以添加操作按钮,如确定、取消等,以供用户进行相应的操作。 同时,我们还可以根据需要,通过Dialog组件提供的事件钩子函数,如visible-change等,来处理弹窗的显示和隐藏时的逻辑。 综上所述,编写elementui弹窗的详情面需要通过Dialog组件创建一个弹窗,并在其中添加相关的内容和操作按钮。通过合理使用组件属性和事件,可以实现一个符合需求的弹窗详情面。 ### 回答3: Element UI是一套基于Vue.js的UI框架,它提供了许多现成的组件,包括弹窗组件。下面我来介绍如何写一个使用Element UI弹窗的详情面。 首先,在Vue项目中引入Element UI的组件库并注册所需组件。可以通过npm install element-ui来安装,并在main.js中引入element-ui样式和组件,然后在Vue实例中调用Vue.use()方法注册所需的组件。 接下来,创建一个新的Vue组件,命名为DetailPage。在模板中,可以使用el-dialog组件作为弹窗容器,并设置visible属性控制弹窗的显示和隐藏。具体的内容则可以根据需求添加,可以使用el-form、el-table等组件展示数据。 在script中,需要定义data属性来存储组件的数据,例如表单中的字段值、表格中的数据等。另外,可以在methods中定义一些逻辑方法,例如保存数据、关闭弹窗等。 最后,在需要使用弹窗面中,引入DetailPage组件,并在需要打开弹窗的地方调用组件。可以通过props属性将需要的数据传递给DetailPage组件,并监听弹窗的关闭事件,根据需要进行相应的操作。 综上所述,使用Element UI的弹窗组件可以通过创建DetailPage组件、设置弹窗内容和逻辑,并在需要使用弹窗面中引入和调用组件来实现。通过Element UI提供的丰富组件和灵活的配置,可以快速构建出漂亮且功能强大的弹窗详情面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值