Vue 使用自定义指令修改底层 dom 元素,没有效果,请大佬指教

使用自定义指令 达到el-input 金额格式化的效果,数据是1000 但是dom需要渲染出1,000的效果

自定义指令代码

export function VMoney(el, binding, vnode) {
const len = binding.arg
if (el.tagName.toLocaleUpperCase() !== ‘INPUT’) {
var els = el.getElementsByTagName(‘input’)
if (els.length !== 1) {
} else {
el = els[0]
}
}
el.onblur = function () {
let value = vnode.data.model.value
if (!value) {
return
}
value = (value.toString()).replace(‘,’, ‘’)
if (!isNaN(value)) {
vnode.data.model.callback(value)
el.value = XEUtils.commafy(value, { digits: len })// 转换为千分位
}
}
el.onblur()
}

el-input处调用指令


Vue 使用自定义指令修改底层dom元素,没有效果

出来的效果

Vue 使用自定义指令修改底层dom元素,没有效果

需要达到的效果

Vue 使用自定义指令修改底层dom元素,没有效果

初始化时是没有效果的,但是input丢失焦点时,事有效果的,需要在初始化时也达到千分位的效果,请大佬指教。

讨论数量: 2
pardon110

用vue的指令钩子函数inserted,像下面这样定义全局money指令

 Vue.directive('money', {
    inserted: function (el, binding) {
        if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
            el = el.getElementsByTagName('input')[0]
        }
        el.value = XEUtils.commafy(el.value, { digits: binding.arg })
        el.onblur = () => {
            el.value = XEUtils.commafy(el.value, { digits: binding.arg })
        }
    }
})
3年前 评论

按照你这种方式,没有效果

3年前 评论
pardon110 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!