Skip to content

vue二次封装防止按钮重复点击组件

二次封装代码

RepeatButton.vue

vue
<template>
    <el-button :loading="loading" v-bind="$attrs" @click="handleClick">
        <slot></slot>
    </el-button>
</template>
<script>
export default {
    data() {
        return {
            loading: false
        }
    },
    methods: {
        async handleClick() {
            this.loading = true
            try {
                await this.$listeners?.click?.()
            } catch (error) {
                console.error(error)
            }
            this.loading = false
        }
    }
}
</script>

使用示例

vue

<template>
  <Repeat-Button @click="handleTest('aaa')" type="primary" size="mini">Loading按钮</Repeat-Button>
</template>
<script>
  // 导入组件
  import RepeatButton from './RepeatButton.vue'

  export default {
    components: {RepeatButton},
    methods: {
      handleTest(params) {
        console.log('handleTest', params);
        return new Promise(resolve => {
          setTimeout(() => {
            resolve()
          }, 1000)
        })
      }
    }
  }
</script>
/src/technology/dateblog/2025/10/20251009-vue%E4%BA%8C%E6%AC%A1%E5%B0%81%E8%A3%85%E9%98%B2%E6%AD%A2%E6%8C%89%E9%92%AE%E9%87%8D%E5%A4%8D%E7%82%B9%E5%87%BB%E7%BB%84%E4%BB%B6.html