// 注册一个全局自定义指令 `v-debounce`
Vue.directive('debounce', {
// 当被绑定的元素插入到 DOM 中时...
inserted: function (el, binding) {
let timer;
el.addEventListener('click', () => {
clearTimeout(timer);
timer = setTimeout(() => {
binding.value(); // 调用传给指令的方法
}, 500);
});
},
// 当绑定元素的父组件更新时...
update: function (el, binding) {
let timer;
el.addEventListener('click', () => {
clearTimeout(timer);
timer = setTimeout(() => {
binding.value(); // 调用传给指令的方法
}, 500);
});
}
});
// 使用指令
// 在组件中
<template>
<button v-debounce="myClickHandler">Click me</button>
</template>
<script>
export default {
methods: {
myClickHandler() {
// 处理点击事件
}
}
}
</script>
问题:用户点击保存时,可能会多次点击。导致生成重复数据。
目标:多次点击时,1s内只允许提交一次数据。
1.在utils文件夹创建文件preventReClick.js

export default {
install (Vue) {
// 防止按钮重复点击
Vue.directive('preventReClick', {
inserted (el, binding) {
// console.log("binding-7", binding)
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true
setTimeout(() => {
el.disabled = false
}, binding.value || 2000)
}
})
}
})
}
}2.在main.js中引入

3、在.vue 文件中使用

以上为个人经验,希望对您有所帮助。