vue自定义一个指令实现el-input-number组件显示千分号,但实际拿到的值是number类型
admin
2024-04-10 20:02:55
0次

下面先简单实现聚焦输入时是数字,失焦时展示千分号,但实际拿到的值也还是数字;



directives: {thousands: {// 被绑定元素插入父节点时调用inserted: function (el) {// 获取input节点if (el.tagName.toLocaleUpperCase() !== 'INPUT') {el = el.getElementsByTagName('input')[0]}// 千分位el.value = parseFloat(el.value).toLocaleString('zh', {minimumFractionDigits: 2,maximumFractionDigits: 2})// 聚焦转化为数字格式(去除千分位)el.onfocus = e => {let a = el.value.replace(/,/g, '') //去除千分号的','el.value = parseFloat(a).toFixed(2)}el.onblur = e => {el.value = parseFloat(el.value).toLocaleString('zh', {minimumFractionDigits: 2,maximumFractionDigits: 2})}}}
}

以上的例子可以实现把el-input-number绑定的初始值转化成千分号,也可以在失焦时转化千分号;
但是如果是通过调用接口获取数据,再赋值给el-input-number绑定的值,就不能实现页面刚加载就展示千分号;原因是因为inserted只在插入父节点时调用,只会执行一次,也就是在初始化页面的时候会调用一次,当数据更新后不会再调用,因此不能实现在数据更新后,转化为千分号;

改变思路:使用update代替inserted,update是组件VNode更新时调用,当数据发生变化的时候,VNode必然会更新;

directives: {thousands: {// 虚拟dom更新时调用update: function (el) {console.log("执行了吗")  // 执行两次// 获取input节点if (el.tagName.toLocaleUpperCase() !== 'INPUT') {el = el.getElementsByTagName('input')[0]}// 千分位el.value = parseFloat(el.value).toLocaleString('zh', {minimumFractionDigits: 2,maximumFractionDigits: 2})// 聚焦转化为数字格式(去除千分位)el.onfocus = e => {let a = el.value.replace(/,/g, '') //去除千分号的','el.value = parseFloat(a).toFixed(2)}el.onblur = e => {el.value = parseFloat(el.value).toLocaleString('zh', {minimumFractionDigits: 2,maximumFractionDigits: 2})}}}
}

以上的例子实现了在虚拟dom更新时也会执行,但是还是不能实现接口数据返回后执行,因为ajax请求是属于异步操作,update钩子函数中拿不到数据更新后的值,思路是使用setTimeout转化成异步,就可以拿到了

let timer = setTimeout(() => {console.log("最新的值",el.value)// 千分位el.value = parseFloat(el.value).toLocaleString('zh', {minimumFractionDigits: 2,maximumFractionDigits: 2})clearTimeout(timer)
}, 0)

完整代码:



{{!show?'显示':'隐藏'}}

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...