clickOnce.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. export default {
  2. bind(el, binding, vnode) {
  3. // 创建加载指示器元素
  4. const loadingIndicator = document.createElement('i');
  5. loadingIndicator.classList.add('loading-indicator', 'el-icon-loading'); // 假设使用 Element UI 的加载图标
  6. el.appendChild(loadingIndicator);
  7. // 隐藏加载指示器,默认不显示
  8. loadingIndicator.style.display = 'none';
  9. // 保存加载指示器引用
  10. el._loadingIndicator = loadingIndicator;
  11. // 添加点击事件监听器
  12. el.addEventListener('click', () => {
  13. // 显示加载指示器
  14. loadingIndicator.style.display = 'inline-block';
  15. // 禁用按钮
  16. el.setAttribute('disabled', '');
  17. // 假设这里有一个异步操作,完成后需要隐藏加载指示器和重新启用按钮
  18. setTimeout(() => {
  19. loadingIndicator.style.display = 'none';
  20. el.removeAttribute('disabled'); // 重新启用按钮
  21. }, 2000); // 模拟异步操作耗时2秒
  22. });
  23. // 清理事件监听器,防止内存泄漏
  24. vnode.context.$once('hook:beforeDestroy', () => {
  25. el.removeEventListener('click', () => {});
  26. el.removeChild(loadingIndicator);
  27. });
  28. }
  29. };