如何添加数组(或)Json中存在的值?

时间:2016-11-15 11:57:19

标签: angularjs angularjs-scope angularjs-ng-repeat

我一直在想是否有人解决了我的问题。我的代码看起来像这样。



var app = angular.module('myApp', []);
app.controller('myCtrl',function($scope){
 //Adding New Check# and Check amount Text Boxes
         $scope.checks = [{checkNum1: '',checkAmt1:''}];


             $scope.add = function() {
               var newCheckNo = $scope.checks.length+1;
               $scope.checks.push({['checkAmt'+newCheckNo]:''});
             };
             
             $scope.tot = function() {
             		return  $scope.checks;
             };
             
             $scope.total = function() {
             		var value = "";
                	for(var i =0 ; i<=$scope.checks.length;i++ ){
                  		value += $scope.checks.get('checkAmt1');
                  }
                return value;
             };

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div class="col-md-12">
<div class="col-md-6">
         <div ng-repeat="check in checks">
               <div class="form-group">
              <label>check Amount:</label>
               <div class="col-md-5">
                <input type="text" class="form-control" id="{{'id'+($index+1)}}" ng-model="check['checkAmt'+($index+1)]" maxlength="6" />
               </div>
               </div>
             </div>
             <button type="button"
              ng-click="add()">Add More</button>
            </div>
</div>
<div class="col-md-6">
   <!--<p ng-repeat="check in checks">{{check['checkAmt'+($index+1)]}}</p>-->
</div>
  <label>{{tot()}}</label>
  <label>{{total()}}</label>
</div>
&#13;
&#13;
&#13;

我正在初始化$scope.checks = [{checkAmt1:''}]; 并在点击添加按钮(checkAmt2checkAmt3,...等等)时推送其他值。我想使用checkAmt1+checkAmt2+动态添加这些值({{total()}} ...等)。 total()函数正在调用,我知道for循环中的逻辑是错误的。请帮助我修复逻辑(或)建议我,如果有任何其他方式来添加这些值。

提前致谢。

注意:请在整页视图中查看结果。

2 个答案:

答案 0 :(得分:1)

首先,它不是使用数组的正确方法。 您可以总结具有相同名称而不是动态名称的列。

我认为以这种方式使您使用的条目与众不同。但这不是好方法,会使你在阵列上的操作变得复杂。

您可以尝试以下列方式构建数组,

In [20]: from itertools import chain

In [21]: list(chain.from_iterable(cls.my_attr for cls in MyClass.__bases__))
Out[21]: ['baz', 'foo', 'bar']

完整更改的代码看起来像

&#13;
&#13;
 $scope.checks = [{id:'',checkNum: '',checkAmt:''}];
&#13;
var app = angular.module('myApp', []);
app.controller('myCtrl',function($scope){
 //Adding New Check# and Check amount Text Boxes
         $scope.checks = [{id:'', checkAmt:''}];


             $scope.add = function() {
               var newCheckNo = $scope.checks.length+1;
               $scope.checks.push({'id':newCheckNo ,'checkAmt':''});
             };
             
             $scope.tot = function() {
               return  $scope.checks;
             };
             
             $scope.total = function() {
               var value = 0;
                 for(var i =0 ; i<$scope.checks.length;i++ ){
                    value += parseInt( $scope.checks[i].checkAmt);

                  }
                return value;
             };

});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我不确定为什么你确实将这些对象推入数组,而不仅仅是数字,但是当你迭代它时 - 你可以通过索引访问每个值,然后获取正确的对象&#39; s值:

for(var i =0 ; i<=$scope.checks.length;i++ ){
   value += $scope.checks[i]['checkAmt' + i];
}