当前位置: 首页 > 面试题库 >

AngularJS十进制输入:将逗号更改为点

寿元白
2023-03-14
问题内容

FCSA Number用来处理AngularJS中的十进制输入。

如果我使用该maxDecimals选项,它几乎可以按预期工作。对于两个小数,输入如“ 100.333”将转换为“ 100.33”。

在我的区域中,逗号用作小数点分隔符,但我网站上的输入应使用点作为小数点分隔符-就像该插件一样。没关系。但是,我希望将“ 100,33”之类的输入转换为“
100.33”。

我怎样才能做到这一点?


问题答案:

恐怕我不熟悉FCSA number:(

但是,如果您的目标是了解如何实现一个 很容易 满足您需求的 简单的面向角度的解决方案
,请继续阅读…您将在price我在插件中实现的指令下面找到。它非常简单,我建议您花些时间研究它,然后在price指令和FCSA源代码的启发下实现自己的解决方案。

  1. a filter将逗号数字转换为十进制数字:
        app.filter('comma2decimal', [
    function() { // should be altered to suit your needs
        return function(input) {
        var ret=(input)?input.toString().trim().replace(",","."):null;
            return parseFloat(ret);
        };
    }]);

此过滤器将自动将数据从视图格式(带逗号)转换为模型格式(您的范围,带小数)。

  1. a filter将十进制数字转换为逗号数字:
        app.filter('decimal2comma', [
    function() {// should be altered to suit your needs
        return function(input) {
            var ret=(input)?input.toString().replace(".",","):null;
            if(ret){
                var decArr=ret.split(",");
                if(decArr.length>1){
                    var dec=decArr[1].length;
                    if(dec===1){ret+="0";}
                }//this is to show prices like 12,20 and not 12,2
            }
            return ret;
        };
    }]);

此过滤器将自动将数据从模型格式(您的范围,带小数点)转换为视图格式(您的视图,带逗号)。

  1. 使用这两个过滤器的directive指定 价格
        app.directive('price', ['$filter',
    function($filter) {
    return {
        restrict:'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ngModelController) {
            ngModelController.$parsers.push(function(data) {
                //convert data from view format to model format

                data=$filter('comma2decimal')(data);

                return data;
            });

            ngModelController.$formatters.push(function(data) {
                //convert data from model format to view format

                data=$filter('decimal2comma')(data);

                return data;
            });
        }
    };}]);

查看这个工作正常的工具,展示一切如何协同工作。

最初,数字(例如,来自数据库)在控制器范围内具有十进制值($ scope.price = 25.36;);

在视图中,它看起来像:在输入中为25,36,在下面的数据库中为25.36。

现在输入任何逗号数字:它将自动转换为十进制数字以插入数据库。

希望这能回答您的问题。

使用指令的优势 :它可重复使用,可在您网站上的任何地方使用它。

使用两个过滤器的优点 :关注点分离。

这种方法使用户可以使用他们在视图中最常用的数字。但是,输入的数字在插入数据库之前可以在后台更改,因此它们的格式正确。

当您从数据库中获取价格/数字时,价格/数字会自动更改,然后以更适合读者的方式在视图中显示。

如果您需要FCSANumber指令中的其他选项,则可以轻松地将它们添加到过滤器中。

您可能需要使用的自定义函数和模型验证ngModelCtrl.$setValidity



 类似资料:
  • 在使用“number”类型和值“1,5”的输入发布表单后,浏览器(Chrome 43.0.2357.130,FF 38.0.5)发送带有点作为小数分隔符的数字,但输入具有属性lang=“cs”(在捷克共和国,我们使用十进制逗号),因此对于ASP。NETMVC的格式不正确。 如何设置浏览器(表单/输入)以发送用户真正填写的内容(在我的示例中为“1,5”)? 从浏览器发送的表单数据:

  • 用户用十六进制或二进制输入一个数字(必须以0x或0b为前缀,如果没有给出错误信息) 我不能用基数,我只是用整数。parseInt(s) 我不知道怎样才能使这个计划奏效。。请帮帮我,我还缺什么?

  • 我有疑问,请告诉我如何进行。下面的图片,你可以看到有两个领域称为销售价格和购买价格,我想在那里只输入这些领域的十进制值请告诉我如何做到这一点 在此处输入图像描述 谢谢你

  • 我需要转换十六进制- 当我运行这个错误实际上是显示我需要的值但我不能得到它 groovy.lang.的方法:静态java.lang.我nteger.parseInt()适用于参数类型:(java.math.大整数,java.lang.整数)值:[28855032353026779507009821653742961358,...]可能的解决方案:parseInt(java.lang.String,