举一个简单的例子:输入货币数据的文本框。要求是以“ $ 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-inputcomponent has a computed value -displayValue, which hasgetandsetmethods defined. In thegetmethod, if input box is not active, it returns formatted currency value.When user types into the input box, the
setmethod ofdisplayValuecomputed property emits the value using$emit, thus notifying parent component about this change.Reference for using
v-modelon custom components: https://vuejs.org/v2/guide/components.html#Form-Input-Components-using-Custom-Events