当前位置: 首页 > wzjs >正文

59做网站高密公司做网站

59做网站,高密公司做网站,京东店铺买卖平台,市场监督管理局电话在 Vue3 和 Element Plus 项目中,防止按钮重复点击是一个常见的需求,特别是在表单提交、支付等场景下。以下是几种实现方式: 1. 使用 Element Plus 的 loading 状态 Element Plus 的按钮组件本身就支持 loading 状态,这是最简单…

在 Vue3 和 Element Plus 项目中,防止按钮重复点击是一个常见的需求,特别是在表单提交、支付等场景下。以下是几种实现方式:

1. 使用 Element Plus 的 loading 状态

Element Plus 的按钮组件本身就支持 loading 状态,这是最简单的方式:

vue

复制

下载

<template><el-button type="primary" :loading="loading" @click="handleSubmit">提交</el-button>
</template><script setup>
import { ref } from 'vue';const loading = ref(false);const handleSubmit = async () => {loading.value = true;try {// 执行异步操作await submitForm();} finally {loading.value = false;}
};
</script>

2. 自定义指令实现防重复点击

可以创建一个全局指令来实现防重复点击:

javascript

复制

下载

// directives.js
import { Directive } from 'vue';export const preventReClick: Directive = {mounted(el, binding) {el.addEventListener('click', () => {if (!el.disabled) {el.disabled = true;setTimeout(() => {el.disabled = false;}, binding.value || 2000);}});}
};// main.js
import { preventReClick } from './directives';
app.directive('prevent-reclick', preventReClick);

使用方式:

vue

复制

下载

<el-button v-prevent-reclick="1000" @click="handleClick">提交</el-button>

3. 使用装饰器(适用于组合式 API)

可以创建一个可组合函数来防止重复点击:

javascript

复制

下载

// composables/usePreventReClick.js
import { ref } from 'vue';export function usePreventReClick() {const isClicking = ref(false);const preventReClick = async (fn) => {if (isClicking.value) return;isClicking.value = true;try {await fn();} finally {isClicking.value = false;}};return {isClicking,preventReClick};
}

ts,usePreventReClick.ts

import { ref } from "vue";type AsyncFunction = () => Promise<void>;/*** 防止重复点击 hook* @returns*/
export function usePreventReClick() {const isClicking = ref(false);const preventReClick = async (fn: AsyncFunction) => {if (isClicking.value) {return;}isClicking.value = true;try {await fn();} finally {isClicking.value = false;}};return {isClicking,preventReClick};
}

使用方式:

vue

复制

下载

<script setup>
import { usePreventReClick } from './composables/usePreventReClick';const { isClicking, preventReClick } = usePreventReClick();const handleSubmit = () => {preventReClick(async () => {// 执行提交逻辑await submitForm();});
};
</script><template><el-button :loading="isClicking" @click="handleSubmit">提交</el-button>
</template>

4. 封装高阶组件

如果需要更复杂的控制,可以封装一个高阶组件:

vue

复制

下载

<!-- PreventReClickButton.vue -->
<template><el-button v-bind="$attrs" :loading="loading" @click="handleClick"><slot></slot></el-button>
</template><script setup>
import { ref } from 'vue';const props = defineProps({onClick: {type: Function,required: true},delay: {type: Number,default: 1000}
});const loading = ref(false);const handleClick = async () => {if (loading.value) return;loading.value = true;try {await props.onClick();} finally {setTimeout(() => {loading.value = false;}, props.delay);}
};
</script>

使用方式:

vue

复制

下载

<PreventReClickButton type="primary" :onClick="submitForm"
>提交
</PreventReClickButton>

总结

以上方法各有优缺点,根据项目需求选择:

  1. 简单场景:直接使用 Element Plus 的 loading 状态

  2. 全局控制:使用自定义指令

  3. 组合式 API:使用可组合函数

  4. 复杂组件:封装高阶组件

http://www.dtcms.com/wzjs/820111.html

相关文章:

  • 找苏州网站建设科技与应用
  • 专业提供网站建设服务的企业网站ico如何添加
  • 爱站长工具做网站挂广告 刷广告
  • 网站如何注册域名南京高端网站建设公司哪家好
  • 电子商务设计网站建设长春专业网站建设公司
  • 江苏建设集团招聘信息网站邢台网站建设有哪些
  • 湖北省建设厅监督网站群晖里的wordpress如何删除
  • 代刷网站只做软件下载批量查询指数
  • 如何做视频网站赚钱wordpress清楚所有评论
  • 网站建设都是用什么软件江苏网站seo
  • 那家建设网站p2p公司最好?网站底部悬浮代码
  • 承德网站推广网站删除留言板功能删除
  • 网站群管理系统哪个好手机应用开发教程
  • 迅捷流程图在线制作网站陕西建设执业中心网站办事大厅
  • 移动互联和网站开发哪个好wordpress网站投放广告
  • 学习建设网站信产部网站备案
  • 益阳建设公司网站软件开发外包服务公司
  • 如何做旅游网站推销网页设计实训步骤和方法
  • 广州机械网站建设外包洛阳免费提供建站方案
  • 广东营销网站制作网站建设制作公司都选万维科技
  • 浙江省建设厅执业资格注册中心网站网页游戏排行力荐新壹玩
  • 做自己头像的网站在电脑制作手机网站用什么软件
  • 滑县网站建设哪家便宜网站图片加载优化
  • 中山快速做网站价格永泰县建设局网站
  • 耐克运动鞋网站建设规划书框架深圳网站建设好吗
  • 做网站外包的公司好干嘛WordPress的网外无法访问
  • 企业网站做多大尺寸深圳医院网站建设
  • 阿里服务器怎么做网站服务器吗三水顺德网站建设
  • 景区网站模板厦门广告公司排行榜
  • 一个电商网站开发要多久wordpress 登录后才能查看