Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何支持数字和文本指令以及输入指令?_Angularjs_Angularjs Directive_Directive - Fatal编程技术网

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

Angularjs 如何支持数字和文本指令以及输入指令?,angularjs,angularjs-directive,directive,Angularjs,Angularjs Directive,Directive,我有一个指令来检查输入值是否为数字,并根据执行操作 myApp.directive('numbersOnly', function () { return { restrict: 'A', require: 'ngModel', link: function (scope, element, attr, ngModelCtrl) { function fromUser(text

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

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);
            }
        };
    });
当我将使用
时,上述代码将起作用,但当我将使用
时,上述代码将停止工作


请告诉我如何同时支持这两个条件?

您能否尝试下面的代码,该代码在“如果”中还有一个条件(isNaN),如下所示

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);
        }
    };
});

下面的代码修复了我的问题

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);
            }
        };
    });
因此,此代码将适用于这两种情况
以及

是,因为
.replace
字符串的方法你能创建一个简单的小提琴吗?你处理的是数字而不是字符串。既然浏览器已经过滤掉了非数字字符,为什么您首先需要它?@charlietfl我必须同时处理数字和字符串。在这种情况下,解决方案是什么?您想要实现什么?请注意,如果您使用
input type=“number”
,则除了数字以外,只有允许的值是
+,-,,e,e
,假设数字来了,那么该代码如何与数字一起工作。