错误: [ngModel:numfmt] 预期“1”是一个数字角度

Error: [ngModel:numfmt] Expected `1` to be a number angularjs

本文关键字:数字 一个 numfmt ngModel 预期 错误      更新时间:2023-09-26

我是Angular的初学者.js。

我正在尝试通过从mongodb获取数据angular.js应用程序上生成动态表单。我已经通过 excel 工作表将导入的数据存储在 mongodb 上,这就是为什么所有JSON值都以String格式存储的原因。

为了解决这个问题,我正在通过检查 JSON 对象的值来动态生成表单。

例如:如果值包含数字("123456"),那么我将显示input type="number",如果值包含电子邮件,则input type="email",值包含 dob 然后datepicker等等。

以下是我的模板代码:

<div class="form-group" ng-repeat="(key,value) in providerList"  ng-if="!$first">                    
   <label>{{key.replace("_", " ") | uppercase}}</label>
   <div ng-if="providerList[key].length > 100">
   <textarea class="form-control" ng-model="providerList[key]"></textarea>
   </div>
   <div ng-if="providerList[key].length < 100 && !isNumeric(providerList[key]) && !checkEmail(providerList[key])">
   <input type="text" class="form-control" id='datepicker' ng-model="providerList[key]">        
   </div>
   <div ng-if="isNumeric(providerList[key])">                        
   <input type="number" class="form-control" ng-model="providerList[key]">        
   </div>
   <div ng-if="checkEmail(providerList[key])">                        
   <input type="email" class="form-control" ng-model="providerList[key]">        
   </div>
</div>

这是我的控制器:

    $scope.isNumeric = function (data) {
                if (isNaN(data)) {
                    return false;
                } else {
                    return true;
                }
//                if (/^'d+$/.test(data)) {
//                    return true;
//                } else {
//                    return false;
//                }
            };
            $scope.checkEmail = function (email) {
                var re = /^(([^<>()'[']''.,;:'s@"]+('.[^<>()'[']''.,;:'s@"]+)*)|(".+"))@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}])|(([a-zA-Z'-0-9]+'.)+[a-zA-Z]{2,}))$/;
                return re.test(email);
            };

在这里,每当调用isNumeric函数时,它在控制台上显示以下错误:

Error: [ngModel:numfmt] Expected `1` to be a number
http://errors.angularjs.org/1.4.8/ngModel/numfmt?p0=1
minErr/<@http://localhost:1000/js/vendor/angular/angular.js:68:12
numberInputType/<@http://localhost:1000/js/vendor/angular/angular.js:21977:1
ngModelWatch@http://localhost:1000/js/vendor/angular/angular.js:25489:21
$RootScopeProvider/this.$get</Scope.prototype.$digest@http://localhost:1000/js/vendor/angular/angular.js:15888:34
$RootScopeProvider/this.$get</Scope.prototype.$apply@http://localhost:1000/js/vendor/angular/angular.js:16160:13
done@http://localhost:1000/js/vendor/angular/angular.js:10589:36
completeRequest@http://localhost:1000/js/vendor/angular/angular.js:10787:7
requestLoaded@http://localhost:1000/js/vendor/angular/angular.js:10728:1

return logFn.apply(console, args);
angular.js (line 12520)
Error: [ngModel:numfmt] Expected `1234567890` to be a number
http://errors.angularjs.org/1.4.8/ngModel/numfmt?p0=1234567890
minErr/<@http://localhost:1000/js/vendor/angular/angular.js:68:12
numberInputType/<@http://localhost:1000/js/vendor/angular/angular.js:21977:1
ngModelWatch@http://localhost:1000/js/vendor/angular/angular.js:25489:21
$RootScopeProvider/this.$get</Scope.prototype.$digest@http://localhost:1000/js/vendor/angular/angular.js:15888:34
$RootScopeProvider/this.$get</Scope.prototype.$apply@http://localhost:1000/js/vendor/angular/angular.js:16160:13
done@http://localhost:1000/js/vendor/angular/angular.js:10589:36
completeRequest@http://localhost:1000/js/vendor/angular/angular.js:10787:7

与我调用函数进行电子邮件检查checkEmail相同的方式,它工作得很好,所以isNumeric函数有什么问题。

angular.module('numfmt-error-module', [])
.run(function($rootScope) {
  $rootScope.typeOf = function(value) {
    return typeof value;
  };
})
.directive('stringToNumber', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
      ngModel.$parsers.push(function(value) {
        return '' + value;
      });
      ngModel.$formatters.push(function(value) {
        return parseFloat(value);
      });
    }
  };
});

然后,在相应的输入上使用"字符串到数字"。

参考: https://docs.angularjs.org/error/ngModel/numfmt

问题在于表单输入类型='数字',JSON 字符串被传递给模型。

在分配给模型之前或打开表单之前,您需要解析控制器中的所有数字(一旦从调用收到响应$http

你的模型

提供程序列表[键]

应该包含 1 作为数字,但它必须是字符串"1",所以这个错误来了。

将模型值更改为数字。

相关文章: