错误:[ngModel:numfmt]期望`1`是一个数字angularjs

时间:2016-03-09 09:37:13

标签: javascript angularjs json mongodb mean-stack

我是Angular.js的初学者。

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

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

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

以下是我的模板代码:

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功能的问题。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

然后,使用&#39; string-to-number&#39;各自的意见。

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

答案 2 :(得分:0)

你的模特

  

<强> providerList [键]

应该包含1作为数字,但它必须是&#34; 1&#34;这是字符串,所以这个错误即将到来。

将模型值更改为数字。