vue自定义输入框指令千分位
时间: 2025-05-28 18:15:24 浏览: 22
### 创建 Vue 自定义指令实现输入框千分位格式化
在 Vue 中创建自定义指令来实现在 `el-input` 组件中的千分位格式化功能,可以按照如下方式操作:
#### 定义自定义指令逻辑
通过 Vue 的 `directive` 方法注册一个新的全局指令 `v-thousand-separator`。该指令会在绑定到元素上时自动处理用户的输入并将其转换为带有千分位分隔符的字符串。
```javascript
// 注册全局自定义指令 thousandSeparator
Vue.directive('thousand-separator', {
bind(el, binding) {
const toFixedValue = binding.value.toFixed || 0;
function formatToThousand(value) {
if (value === '') return '';
let num = parseFloat(value.replace(/,/g, ''));
if (!isNaN(num)) {
return num.toLocaleString(undefined, { minimumFractionDigits: toFixedValue });
}
return value;
}
el.addEventListener('input', () => {
setTimeout(() => {
el.value = formatToThousand(el.value);
}, 0);
});
// 初始化显示已有的数值
if (el.value !== '') {
el.value = formatToThousand(el.value);
}
},
});
```
此代码片段实现了当用户输入数据后立即应用千分位格式化的功能[^1]。
#### 使用自定义指令于模板中
接下来,在 HTML 或者单文件组件(SFC)内的 `<template>` 部分使用这个新创建好的指令:
```html
<el-input v-model="form.Plan_Settlement_Amount" class="input" v-thousand-separator="{toFixed:2}" />
```
这里设置了 `v-thousand-separator` 指令,并传递了一个对象参数 `{toFixed:2}` 来指定保留两位小数。
为了确保输入的数据能够被正确解析成数字而不是字符串形式保存下来,还需要调整 VModel 所关联的数据属性 `Plan_Settlement_Amount` 的 setter 和 getter 函数,以便去除所有的逗号再进行赋值操作。
```javascript
data() {
return {
form: {
get Plan_Settlement_Amount() {
return this._planSettlementAmount ? Number(this._planSettlementAmount).toLocaleString() : '';
},
set Plan_Settlement_Amount(newValue) {
this._planSettlementAmount = newValue.replace(/[^\d.-]/g, '');
},
_planSettlementAmount: ''
}
};
}
```
这段 JavaScript 代码展示了如何利用计算属性的方式管理表单项的状态变化,从而保证每次更新视图层的同时也能同步修改实际存储的数据[^2]。
阅读全文
相关推荐

















