import sleep from "../utils/sleep"; const loadingName: string = 'xc-loading' const VElBtn = { created(el: HTMLHtmlElement, binding, vnode, prevVnode) { /** * 这里有个 bug 如果使用了 v-loading 的话有问题 * 这个函数一定要是 promise 函数 * 如果这个函数需要参数的话,需要: * 测试 这样写 * * 无参函数: * 测试 * * @param ev 事件 */ el.addEventListener('click', async (ev: Event) => { ev.stopPropagation(); let startTime: Date = new Date(); async function finallyFunc() { let endTime = new Date() if (endTime.getTime() - startTime.getTime() < 1000) { await sleep(500) } el.setAttribute(loadingName, 'false') vnode.ref.i.props.loading = false } vnode.ref.i.props.loading = true el.setAttribute(loadingName, 'true') try { await binding.value.func ? binding.value.func(binding.value.value) : binding.value() } finally { await finallyFunc() } }); }, updated(el: HTMLHtmlElement, binding, vnode, prevVnode) { let loading: string | boolean = el.getAttribute(loadingName) if (loading) { loading = loading === 'true' vnode.ref.i.props.loading = loading } }, } export default VElBtn