使用带有角数过滤器的点表示法

时间:2016-04-19 10:37:47

标签: angularjs filter locale

我有一个输入字段。用户输入一个数字。我需要使用代表数千(不是小数)的点正确格式化此数字 用户输入:5600 - >变成5.600(五千六百) 用户输入:56000 - >变成56.000 等

我需要在输入字段中正确格式化数字。

我有一个小提琴:http://jsfiddle.net/El4a/KPeBD/1059/

这个小提琴完美无缺,但是它使用角度数字滤波器,因此它用逗号表示格式化数字。但是我需要一个点符号。

所以我尝试用点手动替换逗号。

 var listener = function() {

            var value = $element.val().replace(/,/g, '') //delete all notations

            var x = $element.val($filter('number')(value, 0)) //filter
            $element.val(x).replace(/,/g, '.') //replace comma by dot
        }

这不起作用。

然后我尝试使用locale cdn(可以在链接小提琴中看到)。 这似乎是最初创建的解决方案:

dot-notation

但是当添加下一个0时,它会翻转并执行:

nope

我想我也必须改变以下行

var value = $element.val().replace(/,/g, '')

var value = $element.val().replace(/./g, '')

但输入字段完全无法使用。

希望有人为我找到解决方案!

2 个答案:

答案 0 :(得分:0)

我已删除该指令,因为它对过滤该号码没有多大帮助。

我们可以使用angular filter ($filter)。将代码更改为

myApp.filter('number', ['$filter', function ($filter) {
return function (input, symbol, fraction) {
  if (input) {
    var decimal = input.toString().split('.')[1],
      value = input.toString().split('.')[0],
      filtered = value.replace(/(?=(\d\d\d)$)/g, ".");
    return (decimal) ? (fraction > 0 ? filtered + '.' + decimal.slice(0, fraction) : filtered) :  filtered;
  } else {
    return 0
  }
}
}])
抱歉,我删除了整个指令部分并更新了jsFiddle。

以下是更新后的Demo

答案 1 :(得分:0)

我终于找到了它......

我忘了逃避该死的。炭:

如此改变

var value = $element.val().replace(/./g, '')

var value = $element.val().replace(/\./g, '')

让它发挥作用

花了48小时......