一、背景
要求点击完按钮后对按钮进行禁用,并在几秒后启用按钮点击
二、实现思路
对比各种实现代码量和使用便捷程度,选择封装公共指令,可以给按钮快捷添加这个功能
三、步骤
1、根据vue 文档定义一个空指令。
Vue.directive("preventClick", {
inserted(el, binding, vnode) {
}
})
2、按钮添加点击事件,点击后禁用按钮
Vue.directive("preventClick", {
inserted(el, binding, vnode) {
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true //禁用
el.classList.add(`is-disabled`);
}
})
}
})
3、根据传值时间恢复点击
Vue.directive("preventClick", {
inserted(el, binding, vnode) {
const { value } = binding;
if (value =https://www.it610.com/article/== false) {
return;
}
el.addEventListener('click', () => {
if (!el.disabled) {
const defalutTime = (value || 5) - 0;
//缺省默认禁用时间
el.disabled = true //禁用
el.classList.add(`is-disabled`);
setTimeout(() => { //恢复按钮状态
el.classList.remove(`is-disabled`);
el.disabled = false
}, defalutTime * 1000)
}
})
}
})
4、优化按钮增加剩余时间提示
Vue.directive("preventClick", {
inserted(el, binding, vnode) {
const { value } = binding;
if (value =https://www.it610.com/article/== false) {
return;
}
el.addEventListener('click', () => {
if (!el.disabled) {
const defalutTime = (value || 5) - 0;
//缺省默认禁用时间
el.disabled = true //禁用
el.classList.add(`is-disabled`);
let originalButton = el.innerHTML;
let curTime = defalutTime;
el.innerHTML = originalButton + `(${curTime})`;
let timer = window.setInterval(() => { //更新时间状态
curTime--;
if (curTime == 0) {
window.clearInterval(timer);
timer = null;
}
el.innerHTML = originalButton + `(${curTime})`;
}, 1000)
setTimeout(() => { //恢复按钮状态
el.classList.remove(`is-disabled`);
el.disabled = false
el.innerHTML = originalButton
}, defalutTime * 1000)
}
})
}
})
四、调用
导出
五、总结
【VUE 自定义指令实现点击后禁用elementUI按钮】自定义指令写法代码量总体较少,而且使用方便,对原有逻辑入侵性较小
推荐阅读
- Vue3自制UI框架的技术总结
- 常见的 Monorepo 框架大比较
- Vue动态绑定背景图片及三元运算操作
- 我想写一个 Vue3 组件库,我该怎么开始()
- 7个 Vue3 中的组件通信方式
- Vue3中实现路由跳转的过渡动画(一)
- Vue3中插槽的概念和用法
- 关于Vue3的defineProps用法
- elementUI Tree树形控件如何设置默认树节点