/** * @author {LDM} * @param {自定义指令名称} directiveName * @param {处理函数} funcName */function getDirective(directiveName, funcName) { const selfDirective = Vue.directive(directiveName, { bind: function(el, binding, vnode) { el.addEventListener('compositionstart', onCompositionStart) el.addEventListener('compositionend', onCompositionEnd) if (el.nodeName === 'input' || el.nodeName === 'INPUT') { el.addEventListener('keyup', function(e) { if (e.target.composing) return el.value = funcName(el.value, binding) vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(el.value, binding)) }) el.addEventListener('blur', function(e) { if (e.target.composing) return el.value = funcName(el.value, binding) vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(el.value, binding)) }) } else { const item = vnode.child.$refs['input'] if (!item) return item.addEventListener('keyup', function(e) { if (e.target.composing) return item.value = funcName(item.value, binding) vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(item.value, binding)) }) item.addEventListener('blur', function(e) { if (e.target.composing) return item.value = funcName(item.value, binding) vnode && vnode.data && vnode.data.model && vnode.data.model.callback && vnode.data.model.callback(funcName(item.value, binding)) }) } }, update: function(el, binding, vnode) { if (vnode.child) { const currentValue = funcName(vnode.data.model.value, binding) vnode.child.currentValue = currentValue vnode.data.model.callback(currentValue) } } }) return selfDirective}const _letterNumberZH = (value, binding) => { if (value) { const reg = /[^0-9a-zA-Z\u4e00-\u9fa5]/g const text = value.replace(reg, '') if (binding && binding.value) { return text.substr(0, binding.value) } return text } return value}// 字母数字中文 可配合 v-letterNumberZH="length" 限制输入长度 length 为长度,0 或者没有 则不限制输入长度const letterNumberZH = getDirective('letterNumberZH', _letterNumberZH)