需要的效果,类似 excel 中的货币格式输入框
- 在存在焦点输入的时候,显示为数字
- 失去焦点,显示货币分隔符
- 支持复制粘贴带货币分隔符的数字,并且
粘贴的时候去除逗号,失去焦点的时候又显示货币格式
需要的效果,类似 excel 中的货币格式输入框
粘贴的时候去除逗号,失去焦点的时候又显示货币格式
在 Vue 中使用 Element UI 的 el-input
组件来实现一个类似 Excel 中的货币输入框,需要用到输入框的 v-model
指令和自定义格式器。这里我们使用 Vue.js
和 Element UI
创建一个简单的应用来展示如何实现这个功能。
首先,你需要在你的 Vue 项目中安装和引入 Element UI。你可以通过 npm 或者 yarn 来安装 Element UI:
npm install element-ui
# 或者
yarn add element-ui
在你的 Vue 文件中引入 Element UI 和相应的样式文件:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
然后,你可以在你的 Vue 模板中创建一个 el-input
组件,并使用 v-model
指令绑定到数据对象的属性上。为了实现货币格式,我们需要用到 el-input
的 :formatter
属性,它可以接受一个函数,这个函数接收一个参数,就是用户输入的内容,我们要在这个函数里对输入的内容进行处理:
<template>
<el-input
v-model="input"
:formatter="formatInput"
placeholder="请输入货币数值"
></el-input>
</template>
在你的 Vue 实例中定义 input
数据属性和 formatInput
方法:
export default {
data() {
return {
input: ''
}
},
methods: {
formatInput(value) {
if (value) {
// 当输入框有值的时候,显示为数字
return value;
} else {
// 当失去焦点或者输入逗号时,显示货币格式
return this.input.replace(/[^\d]/g, '').replace(/(\d)(?=(\d{3})+$)/g, '$1,');
}
}
}
}
在这个例子中,当输入框里有值的时候,就显示为数字。当输入框失去焦点或者输入逗号时,就显示为货币格式。注意这里我们使用了 JavaScript 的 replace
方法来替换字符串中的字符,实现货币格式的显示。例如,/[^\d]/g
匹配所有非数字字符,然后用空字符串替换它们;/(\d)(?=(\d{3})+$)/g
匹配每三位数字后面加一个逗号,例如把 "1234567" 变为 "1,234,567"。
可以通过设置formatter来修改格式化文字,当获取焦点的时候不格式化,原样输出,失去焦点的时候再格式化,需要思考的是怎么让他更新,我这里是加了个nextTick给他重新赋值让他更新,你可以思考下有没有别的比较好的方法
27 回答12.8k 阅读
6 回答2.1k 阅读✓ 已解决
8 回答3.4k 阅读✓ 已解决
6 回答950 阅读✓ 已解决
5 回答5.1k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.7k 阅读
刚好我也是做在线表格的
你说的这种格式我之前也做过 不过是 canvas 实现的。
我简单给你说下思路吧。