2016-08-08 9 views
1

私は6行4列のテーブルを持っています(4つ目は合計:これは上記の3つの列の合計になります)。基本的には、各列の合計を計算し、4列目の合計数を表示します。私のテーブルはng-repeatを使って生成されます。Angular.Js他の3つの入力の合計で入力を動的に更新する

のような何か:NGリピートから

<table> 
    <thead> 
     <tr> 
     <th ng-repeat="item in items">{{item}}</th> 
     </tr> 
    </thead> 

     <tbody> 
      <tr> 
      <td>Input1:</td> 
      <td ng-repeat="collection in collections"> 
      <input type="text" ng-model="collection.row1"> 
      </td> 
      </tr> 
      <tr> 
      <td>Input2:</td> 
      <td ng-repeat="collection in collections"> 
      <input type="text" ng-model="collection.row2"> 
      </td> 
      </tr> 
      <tr> 
      <td>Input3:</td> 
      <td ng-repeat="collection in collections"> 
      <input type="text" ng-model="collection.row3"> 
      </td> 
      </tr> 
      <tr> 
      <td>Sum:</td> 
      <td ng-repeat="collection in collections" ng-model="collection.total"> 
      {{collection.total}} 
      </td> 
      </tr> 
     </tbody> 
    </table> 

「コレクションは、」私はGETメソッドを使用してAPIから取得し、$スコープに自分のデータを格納しています6つのオブジェクトの配列になります。

ng-modelの「Total」行は、計算が完了してバックエンドから来ていますが、動的に更新されているので、クライアントに表示する方法が必要です。

私は$ watchと$ watchCollectionを試しましたが、また変更することができましたが、動作させる方法が見つかりません。私のコントローラーでは、オブジェクトの配列を調べるためにforを使用し、すべての位置を合計しようとしましたが、それは機能しませんでした。

私の問題の別の解決方法はありますか?ここで

は、私は私のコントローラにしようとしたものです:

$scope.collections = []; 

$scope.getTotal = function(){ 
    var total = 0; 
    for(var i = 0; i < $scope.collections[i].length; i++){ 
     var myItems= $scope.collections[i]; 
     total = (myItems.row1+ myItems.row2+ myItems.row3); 
    } 
    return total; 
}; 

ありがとうございました。

+0

与え、あなたのコード内の<td></td>内の表示値のために競合しているあなたがしようとしているものを私たちに表示します。 .. – Rayon

+0

フィドルplzを提供してください:) –

答えて

0

よう

currentCollection.Total = CalculatedTotal; 

何かをCalculatedTotalを保存?

<td>{{collection.row1 + collection.row2 + collection.row3}}</td> 

また、<input>以外のngモデルは存在しません。おそらくあなたの主なエラーがどこにあるのでしょうか。 NG-モデルは<td>年代の内側に値を設定しようとすると、その角度テンプレート({{X}})とngのモデルは

+0

Hmmm。私はこれを試して、それらを合計しない3つの値を連結します。 – Wolfx

+0

{{(collection.row1 * 1)+(collection.row2 * 1)+(collection.row3 * 1)}}は私のために働いていましたが、もう別の問題があります。私の入力タイプは「テキスト」ですが、入力は時間(hh:mm)になります。明らかに、このようにまとめて入力することはできません。 – Wolfx

+0

タイプを 'に変更してください。 –

0

あなたはバックエンドでの合計を計算する場合

$ scope.CalculatedTotalは、いくつかの値を=。

ので、あなたが最後の行で呼び出すことができます。

 <td>Sum:</td> 
     <td ng-repeat="collection in collections" ng-model="collection.total"> 
     {{CalculatedTotal}} 
     </td> 

またはオブジェクトにして、単にテンプレートでそれをしないのはなぜその

+0

バックエンドから計算された値を表示することはできますが、他のすべての入力の合計を{{CalculatedTotal}}の代わりに見たいと思っています。 $スコープのようなもの$ watch( 'collection.total'、function(){$ scope.total = $ scope.collection [i] .row1 + $ scope.collection [i] .row2 + $ scope.collection [i ] .row3;}); – Wolfx

+1

ng-modelの代わりにdata-ng-modelを使用し、親のリピートにデータモデルを入れてください –

関連する問題