举一个简单的例子:输入货币数据的文本框。要求是以“ $ 1,234,567”格式显示用户输入并删除小数点。
我已经尝试过vue指令。当由于其他控件而刷新UI时,未调用指令的update方法。因此文本框中的值将恢复为没有任何格式的值。
我还尝试了v-on:change事件处理程序。但是我不知道如何在事件处理程序中调用全局函数。在每个Vue对象中创建货币转换方法不是一个好习惯。
那么,现在Vue 2.0中格式化的标准方式是什么?
问候
举一个简单的例子:输入货币数据的文本框。要求是以“ $ 1,234,567”格式显示用户输入并删除小数点。
我已经尝试过vue指令。当由于其他控件而刷新UI时,未调用指令的update方法。因此文本框中的值将恢复为没有任何格式的值。
我还尝试了v-on:change事件处理程序。但是我不知道如何在事件处理程序中调用全局函数。在每个Vue对象中创建货币转换方法不是一个好习惯。
那么,现在Vue 2.0中格式化的标准方式是什么?
问候
这是一个工作示例:https : //jsfiddle.net/mani04/w6oo9b6j/
它通过在聚焦和聚焦事件期间修改输入字符串(您的货币值)来工作,如下所示:
<input type="text" v-model="formattedCurrencyValue" @blur="focusOut" @focus="focusIn"/>
当您将光标放在输入框中时,它将采用this.currencyValue
并将其转换为纯格式,以便用户可以对其进行修改。
用户键入该值并单击其他位置(焦点移出)后,this.currencyValue
在忽略非数字字符后将重新计算,并按要求设置显示文本的格式。
货币格式化程序(reg exp)是从此处复制粘贴的内容:如何在JavaScript中将数字格式化为货币?
如果您不想要所提到的小数点,可以this.currencyValue.toFixed(0)
使用该focusOut
方法。
请检查此工作的jsFiddle示例:https ://jsfiddle.net/mani04/bgzhw68m/
在此示例中,格式化的货币输入本身就是一个组件,其用法
v-model
与Vue.js中的任何其他表单元素一样。您可以按以下方式初始化此组件:my-currency-input
是一个自包含组件,在输入框处于非活动状态时会格式化货币值。当用户将光标放在其中时,将删除格式,以便用户可以舒适地修改该值。下面是它的工作原理:
The
my-currency-input
component has a computed value -displayValue
, which hasget
andset
methods defined. In theget
method, if input box is not active, it returns formatted currency value.When user types into the input box, the
set
method ofdisplayValue
computed property emits the value using$emit
, thus notifying parent component about this change.Reference for using
v-model
on custom components: https://vuejs.org/v2/guide/components.html#Form-Input-Components-using-Custom-Events