如何使用AngularJS动态获取文本框值

时间:2016-02-14 11:59:05

标签: javascript angularjs

我按照以下教程在Angular中添加了两个值; Addition of Two Numbers in AngularJS

但是现在我必须在ng-repeat中总结动态文本框值。

我有以下代码

HTML代码

 ......
        <table>
            <tr>
                <th>Name</th>
                <th>Days</th>
            </tr>
            <tr ng-repeat="si in serImp">
                <td>{{si.Name}}</td>
                <td><input type="number" ng-model="si.Days" /></td>
            </tr>
        </table>
        .......
        <button ng-click="sum()">Calculate</button>
        .......

JS代码

.........
        $scope.serImp = [];
        $scope.serImp = data;
                // here data is object contain multiple Name+Durations e.g. 
        /*data = 
        [0]
   Name:"first"
   Days: 1
[1]
   Name:"second"
   Days: 2
[2]
   Name:"third"
   Days: 3*/

         $scope.sum = function () {
// sum code goes here
    }
    ........

我的问题是:如何从ng-model =“si.Days”中获取值/数字的总和

2 个答案:

答案 0 :(得分:1)

使用reduce来总结所有日子。 使用ng-model修改值时,您正在操作$scope.serImp数组。然后,您可以使用这些值来计算总和。

$scope.sum = function () {
     return $scope.serImp.reduce(function(prv, cur) { 
         return prv.Days + cur.Days; 
     });
}

Reduce采用一个数组,并通过将一个函数应用于其所有元素将其减少为一个值。在我们的例子中,只是简单地将所有日子相加。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

答案 1 :(得分:1)

我将创建将返回所有Days of total&amp;将直接绑定到html

{{totalDays()}}

<强>代码

$scope.totalDays = function(){
  var totalDays = 0;
  angular.forEach( $scope.serImp, function(si){
     if(si.Days && !isNaN(si.Days)){
        totalDays += Number(si.Days);
     }
  })
}