const map = { throttle: { bind: function (el, obj) { let timerId = null let flag = true el.addEventListener('input', function () { if (!flag) return flag = false timerId && clearTimeout(timerId) timerId = setTimeout(function () { flag = true obj.value() }, 800) }) } } } export default { install(Vue) { for (const key in map) { Vue.directive(key, map[key]) } } }