console
var app = new Vue({
el: '#app',
data() {
return {
value: ''
}
},
directives: {
enterNumber: {
bind: (el, binding) => {
// 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点)
if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
el = el.getElementsByTagName('input')[0]
}
el.value = el.value.replace(/[^0-9]+/g, '')
el.handlerInput = () => {
if (el.inputLocking) return
const oldValue = el.value
const newValue = el.value.replace(/[^0-9]+/g, '')
if (oldValue !== newValue) {
el.value = newValue
el.dispatchEvent(new Event('input'))
}
}
el.handleCompositionStart = () => {
el.inputLocking = true
}
el.handleCompositionEnd = () => {
el.inputLocking = false
el.dispatchEvent(new Event('input'))
}
el.addEventListener('input', el.handlerInput)
el.addEventListener('compositionstart', el.handleCompositionStart)
el.addEventListener('compositionend', el.handleCompositionEnd)
},
unbind: (el, binding) => {
// 指令作用在 element-input 节点,对应原生 div.el-input (真实input节点的父节点)
if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
el = el.getElementsByTagName('input')[0]
}
el.removeEventListener('input', el.handlerInput)
el.removeEventListener('input', el.handleCompositionStart)
el.removeEventListener('input', el.handleCompositionEnd)
}
}
}
})
<div id="app">
<div>{{value}}</div>
<el-input v-model="value" v-enter-number placeholder="请输入"></el-input>
</div>