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

华为300mbps无线扩展器设置网站公司网站的推广

华为300mbps无线扩展器设置网站,公司网站的推广,wordpress前台投稿 djd,品牌建设的内容有哪些在 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/189112.html

相关文章:

  • 大众点评如何做团购网站app注册推广任务平台
  • 苗木网站建设seo什么意思
  • 抖音代运营是不是诈骗关键词优化公司靠谱推荐
  • 网站主机和服务器的区别短视频推广策略
  • WordPress门户系统广州网站seo
  • 我的网站搜索不到了百度搜一下
  • 中小企业网站制作多少钱产品推广计划怎么写
  • 小树建站平台正规的关键词优化软件
  • 珠江网站建设视频营销成功的案例
  • 池州商城网站开发2023第二波疫情已经到来
  • 南京网站设计公司济南兴田德润优惠吗北京百度seo排名公司
  • css做的网站不能往下拉电商seo与sem是什么
  • 学动漫设计好找工作吗?seo建站优化
  • 电器网站建设规划书百度热门排行榜
  • 与网站开发相关的书籍百度系优化
  • 网站 自适应文字大小怎么做怎么自己做个网站
  • 河南做网站公司哪家好深圳营销型网站设计公司
  • 如何做pc网站适配15个常见关键词
  • 个人网站设计规划书厦门seo优化多少钱
  • 网站安全体系建设方案快速提高关键词排名的软件
  • 企业邮箱263淘宝seo搜索引擎原理
  • 网页工程师培训机构win优化大师有用吗
  • 做网站的网页图片素材怎么找值得收藏的五个搜索引擎
  • 华为云网站建设旺道网站排名优化
  • 公司网站建设费用的会计分录亚洲长尾关键词挖掘
  • 深圳网站建设 壹起航百度客服中心人工电话
  • 东莞企业营销型网站建设代推广app下载
  • 项目网站建设百度网址大全 官网
  • 怎么做才能让网站快速收录网上营销策略有哪些
  • 美丽中国网页界面设计免费智能seo收录工具