在AngularJS 1.6中,即使ng-if是正确的,如何避免错误[ngModel:numfmt]?

时间:2017-09-11 08:22:14

标签: angularjs types numbers

我有一个奇怪的错误。我需要显示输入[type =" text"]或输入[type =" number"],具体取决于条件ng-if中的值:

 {{ column.item === 'number' }}
 <input ng-model="inserts[pointers.headings.content.tabInserts - 1].dados[0][columnId].value"
        class="form-control"
        placeholder="{{ column.default }}"
        ng-if="column.item === 'text' && !column.extra"/>
  <input
       ng-model="inserts[pointers.headings.content.tabInserts - 1].dados[0][columnId].value"
       class="form-control"
       type="number"
       placeholder="{{ column.default }}" 
       ng-if="column.item === 'number' && !column.extra" />

我有一个奇怪的结果:...当插入[pointers.headings.content.tabInserts - 1] .dados [0] [columnId] .value 是前一个之后的字符串一个数字。

即使{{column.item ===&#39; number&#39;正确显示&#34;错误&#34;并且不会显示第二个输入,AngularJS继续发送此错误:

  

错误:[ngModel:numfmt] http://errors.angularjs.org/1.6.4/ngModel/numfmt?p0=John

为什么?它不应该试图这样做。有人有个主意吗?

1 个答案:

答案 0 :(得分:1)

我认为您从错误中获得了足够的信息:https://docs.angularjs.org/error/ngModel/numfmt?p0=John

  

预期John为数字

您可以将其复制为:

<tr ng-repeat="x in ['Jhon']">
    <td>
      <input type="number" ng-model="x" /> {{ x }} : {{ typeOf(x) }}
    </td>
  </tr>

VM424 angular.min.js:124 Error: [ngModel:numfmt] http://errors.angularjs.org/1.6.7-build.5459+sha.21a2f4b/ngModel/numfmt?p0=Jhon
    at VM424 angular.min.js:7
    at Array.<anonymous> (VM424 angular.min.js:187)
    at VM424 angular.min.js:192
    at m.$digest (VM424 angular.min.js:147)
    at m.$apply (VM424 angular.min.js:150)
    at VM424 angular.min.js:22

因此,请确保inserts[pointers.headings.content.tabInserts - 1].dados[0][columnId].value是一个数字,而不是Jhon

如果您使用数字作为字符串,则可以使用string-to-number指令:

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

HTML

<table>
  <tr ng-repeat="x in ['Jhon', '2']">
    <td>
      <input type="number" string-to-number ng-model="x" /> {{ x }} : {{ typeOf(x) }}
    </td>
  </tr>
</table>

Demo Plunker