ng模型的总和不在ng重复中

时间:2017-11-11 14:01:07

标签: angularjs angularjs-ng-repeat

HTML

<tr ng-repeat-start="marks in pagedItemss">
  <td>
    <input type="text" ng-model="marks.aaa" ng-pattern="/^[0-9]*$/" maxlength="3">
  </td>
  <td>
    <input type="text" ng-model="marks.bbb" ng-pattern="/^[0-9]*$/" maxlength="3">
  </td>
  <td>
    <span ng-model="sum" ng-bind="calculateSum()"></span>{{sum ? sum : 0}} 
  </td>
</tr>

CONTROLLER

$scope.calculateSum = function () {
   var sum = 0;
   for (var i = 0;i<$scope.pagedItemss.length;i++)
   {
      sum += $scope.pagedItemss[i]["aaa"]+$scope.pagedItemss[i]["bbb"];
   }
   $scope.sum=sum;
   return sum;
}

ng-model无效的总和。我将值设为(aaa:25,bbb:30),但它会显示并排的值,例如02530

2 个答案:

答案 0 :(得分:0)

当您使用input获取type="text"元素的值时,该值将为String

在JS中,+运算符连接字符串:

0 + '25' + '30' = '02530'

一种可能的解决方法是将输入框更改为number

<input type="number" ...>

或者你可以在操作之前将文本值转换为Number(有很多方法可以做到这一点):

$scope.calculateSum = function () {
  var sum = 0;
  for (var i = 0;i<$scope.pagedItemss.length;i++)
  {
     sum += Number($scope.pagedItemss[i]["aaa"])+Number($scope.pagedItemss[i]["bbb"]);
  }
  $scope.sum=sum;
  return sum;
}

答案 1 :(得分:0)

您需要在添加之前将字符串值转换为整数。 例如:

var a = "20", b="30";
var c = a+b
// c will be 2030

在添加之前获取正确的值parseInt()两个值。

var c = parseInt(a)+parseInt(b);
// c will be 50