如何编写一个AngularJS指令来格式化模型值

How to write an AngularJS directive that formats the model value?

本文关键字:指令 格式化 模型 AngularJS 一个 何编写      更新时间:2023-09-26

我正试图编写一个指令,让<input>元素接受使用,而不是.作为分隔符的浮点数。

我采用了文档中的示例,该示例通过向controller.$parsers添加一个新的解析器来解析用户输入以接受.,作为分隔符。

然而,我现在想要10.5显示为10,5(这不是目前的情况,如果我在我的模型中使用JS设置值)。

那么在指令中我可以添加一个"formatter"函数吗?(就像我可以添加一个"解析器"函数)

指令如下:

app.directive('inputFloat', function () {
    var FLOAT_REGEXP = /^'-?'d+(('.|',)'d+)?$/;
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, controller) {
            controller.$parsers.unshift(function (viewValue) {
                if (FLOAT_REGEXP.test(viewValue)) {
                    controller.$setValidity('float', true);
                    if (typeof viewValue === "number") {
                        return viewValue;
                    } else {
                        return parseFloat(viewValue.replace(',', '.'));
                    }
                } else {
                    controller.$setValidity('float', false);
                    return undefined;
                }
            });
        }
    };
});

在模板中的用法如下:

<input input-float type="text" ng-model="input.value.digitalValue">

您可以使用controller.$formatters