如何支持数字和文本指令以及输入?

时间:2017-04-11 11:44:01

标签: angularjs angularjs-directive directive

我有一个指令来检查输入值是否为数字,并根据执行操作

myApp.directive('numbersOnly', function () {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attr, ngModelCtrl) {
                function fromUser(text) {

                    if (text) {
                        var transformedInput = text.replace(/[^0-9-]/g, '');
                        if (transformedInput !== text) {
                            ngModelCtrl.$setViewValue(transformedInput);
                            ngModelCtrl.$render();
                        }
                        return transformedInput;
                    }
                    return undefined;
                }
                ngModelCtrl.$parsers.push(fromUser);
            }
        };
    });

以上代码将在我使用<input type="text"/>时起作用,但当我使用<input type="number"/>时,上述代码将停止工作。

请告诉我如何支持两者?

2 个答案:

答案 0 :(得分:0)

你可以尝试下面的代码,其中还有一个条件(isNaN)在&#39;如果&#39;如下所示,

myApp.directive('numbersOnly', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, element, attr, ngModelCtrl) {
            function fromUser(text) {

                if (text && isNaN(text)) {
                    var transformedInput = text.replace(/[^0-9-]/g, '');
                    if (transformedInput !== text) {
                        ngModelCtrl.$setViewValue(transformedInput);
                        ngModelCtrl.$render();
                    }
                    return transformedInput;
                }
                return undefined;
            }
            ngModelCtrl.$parsers.push(fromUser);
        }
    };
});

答案 1 :(得分:0)

下面的代码解决了我的问题

myapp.directive('numbersOnly', function () {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attr, ngModelCtrl) {
                function fromUser(value) {
                    if (value) {
                        if(!isNaN(value)){
                        var text = value.toString();
                      }
                      else{
                        var text = value;
                      }
                        var transformedInput = text.replace(/[^0-9-]/g, '');
                        if (transformedInput !== text) {
                            ngModelCtrl.$setViewValue(transformedInput);
                            ngModelCtrl.$render();
                        }
                        return transformedInput;
                    }
                    return undefined;
                }
                ngModelCtrl.$parsers.push(fromUser);
            }
        };
    });

因此,此代码适用于这两种情况 <input type="text"/><input />以及<input type="number"/>