AngularJS是否支持国际化数字输入?

10
我们正在尝试将AngularJS中的<input type='number' />值国际化。
我们已经包含了本地化文件(例如:angular-locale_it-it.js),但是仍然使用英语语言环境显示值。
这是一个问题,因为我们的后端(和管理)期望数字值以用户的语言环境呈现,而接收到123.45而不是123,45会导致错误。
您可以在jsFiddle上找到示例
它在Chrome 27中有效,但在Firefox 21和Internet Explorer 10中无效。

3
我在输入方面遇到了德国货币格式的相同问题。 - Lucas
3个回答

3

也许这不是你想要的答案,但可能会对你有所帮助:

JsBin:http://jsbin.com/iyulaj/1/

使用指令,您可以获取输入数据,解析它,然后将其放入$scope变量中。请参见:http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController$parsers$formatters。我从这里获取了它:Using angularjs filter in input element)。

指令可以查找逗号并将其替换为点。它可能看起来像这样:

angular.module('MyModule').directive('numberinput', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ngModelController) {

            ngModelController.$parsers.push(function(data) {
                //convert data from view format to model format
                return data.replace(',', "."); //converted
            });

            ngModelController.$formatters.push(function(data) {
                //convert data from model format to view format
                return data.replace('.', ","); //converted
            });

            // http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController

        }
    };
});

输入字段:

<input ng-model='value' type='text' numberinput='' />

请注意,现在输入框是文本框。看一下这个:http://jsbin.com/iyurol/1/ 输入框是数字框。但是输入 11,5,它将输出 ùndefined(请注意,我住在德国,我们使用逗号表示小数点)。因此,即使您生活在使用逗号表示小数点的地区,浏览器也无法正确“解析”数字,如果它不是点符号,那么请纠正我,如果有什么不对的地方;)

2

不幸的是(正如我们所预料的那样),这在IE11上不起作用。 - hgoebl

0

由于要格式化的数据类型通常是数字,我们在调用replace()之前应该将数字转换为字符串吗? 当模型数据具有数值时,我遇到了一个错误。 以下方法效果更好:

      ngModelController.$formatters.push(function(data) {
          //convert data from model format to view format
          return (''+data).replace('.', ","); //converted
      });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接