Angularjs 将输入字段限制在角度为2位小数后

Angularjs 将输入字段限制在角度为2位小数后,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在html页面上有许多输入框。我想限制用户输入2位小数后的任何数字。Guilherme Ferreira在他的博客中描述了这一点: 使用数字类型和步骤inerval创建数字输入 <input type="number" name="myDecimal" placeholder="Decimal" ng-model="myDecimal" *step="0.01" /> 然后在HTML中使用它: <input type="number" step="0.01" ng-mo

我在html页面上有许多输入框。我想限制用户输入2位小数后的任何数字。

Guilherme Ferreira在他的博客中描述了这一点:

使用数字类型和步骤inerval创建数字输入

<input type="number" name="myDecimal" placeholder="Decimal" ng-model="myDecimal" *step="0.01" />
然后在HTML中使用它:

<input  type="number" step="0.01" ng-model='somemodel' decimal-places>

您可以使用此指令实现相同的功能

    .directive('validNumber', function () {
    return {
        require: '?ngModel',
        link: function (scope, element, attrs, ngModelCtrl) {
            if (!ngModelCtrl) {
                return;
            }

            ngModelCtrl.$parsers.push(function (val) {
                var clean = val.replace(/[^0-9\.]+/g, '');
                if (val !== clean || val.indexOf('.') != val.lastIndexOf('.')) {
                    if (val.indexOf('.') != val.lastIndexOf('.')) {
                        clean = clean.substring(0, clean.length - 1)
                    }
                }

                if (clean.indexOf('.') != -1) {
                    if (clean.length > (clean.indexOf('.') + 3)) {
                        clean = clean.substring(0, clean.length - 1)
                    }
                }


                ngModelCtrl.$setViewValue(clean);
                ngModelCtrl.$render();
                return clean;


            });

            element.bind('keypress', function (event) {
                if (event.keyCode === 32) {
                    event.preventDefault();
                }
            });
        }
    };
})

此指令验证数字输入,并将输入字段限制为两个小数点。

谢谢您的回复。但输入字段仍允许我在小数点后输入数字。请看一下:您能讨论到目前为止尝试了哪些解决方案,您研究了哪些资源来尝试解决您的问题,或者,您可以展示代码的当前状态以供进一步分析吗?我尝试使用下面的方法,并且成功了
<input  type="number" step="0.01" ng-model='somemodel' decimal-places>
    .directive('validNumber', function () {
    return {
        require: '?ngModel',
        link: function (scope, element, attrs, ngModelCtrl) {
            if (!ngModelCtrl) {
                return;
            }

            ngModelCtrl.$parsers.push(function (val) {
                var clean = val.replace(/[^0-9\.]+/g, '');
                if (val !== clean || val.indexOf('.') != val.lastIndexOf('.')) {
                    if (val.indexOf('.') != val.lastIndexOf('.')) {
                        clean = clean.substring(0, clean.length - 1)
                    }
                }

                if (clean.indexOf('.') != -1) {
                    if (clean.length > (clean.indexOf('.') + 3)) {
                        clean = clean.substring(0, clean.length - 1)
                    }
                }


                ngModelCtrl.$setViewValue(clean);
                ngModelCtrl.$render();
                return clean;


            });

            element.bind('keypress', function (event) {
                if (event.keyCode === 32) {
                    event.preventDefault();
                }
            });
        }
    };
})