2017-03-28 15 views
0

ng-repeatng-changeng-repeatに依存しています。合計外部ng-repeatを計算してください

私のテーブルには、今私は起きていない総

var total = 0; 
$scope.getValue = function(Cost){ 
    total += parseInt(Cost); 
    $scope.tot = total 
} 

を計算しています。この

<table> 
    <tr> 
     <td>Total - total is {{tot}}</td> 
    </tr> 

    <tr ng-repeat="obj in Array"> 
     <td> 
      <input ng-change="getValue(obj.Cost);" ng-model="obj.Quantity" type="number"> 
     </td> 
     <td> 
      <span ng-model="obj.ListPrice">{{obj.ListPrice}}</span> 
     </td> 
     <td> 
      <input type="number" ng-value="obj.Cost = obj.Quantity * obj.ListPrice"> 
     </td> 
    </tr> 
</table> 

のように見えます。それを行う正しい方法は何ですか?

+0

先生にアクセスできるように、あなたは、ng-repeat内の合計をやってtbodyng-initを行っている。この

<span>Total is - {{total}}</span> <table> <tbody ng-init="total = 0"> <tr ng-repeat="obj in Array"> <td> <input ng-change="getValue(obj.Cost);" ng-model="obj.Quantity" type="number"> </td> <td> <span ng-model="obj.ListPrice">{{obj.ListPrice}}</span> </td> <td ng-init="$parent.total = $parent.total + (obj.Quantity * obj.ListPrice)"> <input type="number" ng-value="obj.Cost = obj.Quantity * obj.ListPrice"> </td> </tr> </table> 

(配列、関数のよう(アイテム、インデックス){total + = parseInt(item.Cost);}); $ scope.tot = total;このコード行はgetValue関数内にあります。もう1つ必要なことは、の変更が必要で、ng-change = "getValue(obj。コスト);" – Jayanta

+0

もしあなたが何か問題を抱えているなら私は解決策を持っています – Jayanta

答えて

2

あなたは外の合計にアクセスすることができます基本的にuは私はあなたがangular.forEachを使用する必要があると思うtotalng-repeat

1

グレースで見ることのできるコードにはいくつか問題があります。まず

<span ng-model="obj.ListPrice">{{obj.ListPrice}}</span> 

あなたは何も行くではないスパンでng-modelを使用しています。あなたはofficial documentationからそれについて読むことができます。

セカンド

<input type="number" ng-value="obj.Cost = obj.Quantity * obj.ListPrice"> 

あなたはng-valueobj.Costに値を割り当てる操作を割り当てています。私はあなたがそれを理解してくれることを願っています。私はこれを説明するより良い方法があるかどうかは分かりません。

私はあなたのコードが動作していない何を達成しようとしているが、この

<input type="number" 
     ng-init="obj.Cost = obj.Quantity * obj.ListPrice" 
     ng-value="obj.Cost" /> 
1

であると信じて、それはobj.Costを計算することができる前にあるため、ng-changeがトリガされますと、あなたはCostの古い/古い値を取得します。だから、代わりに、あなたはこのような何か行うことができます:

$scope.getValue = function() { 
    $scope.total = 0 
    $scope.myArray.forEach(function(arr) { 
    $scope.total += arr.Quantity * arr.ListPrice 
    }) 
} 

をそして、あなたのinputは次のようになります。

<td> 
    <input ng-change="getValue()" ng-model="obj.Quantity" type="number"> 
</td> 

ここで作業コードスニペットです:

var app = angular.module('myApp', []); 
 
app.controller("myCtrl", function($scope) { 
 
    $scope.myArray = [{ 
 
    Quantity: "", 
 
    ListPrice: 100 
 
    }, { 
 
    Quantity: "", 
 
    ListPrice: 200 
 
    }] 
 

 
    var total = 0; 
 
    $scope.getValue = function(obj) { 
 
    $scope.total = 0 
 
    $scope.myArray.forEach(function(arr) { 
 
     $scope.total += arr.Quantity * arr.ListPrice 
 
    }) 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.js"></script> 
 

 
<body ng-app="myApp"> 
 
    <div ng-controller="myCtrl"> 
 

 
    <table> 
 
     <tr> 
 
     <td>Total - total is {{total}}</td> 
 
     </tr> 
 

 
     <tr ng-repeat="obj in myArray"> 
 
     <td> 
 
      <input ng-change="getValue(obj);" ng-model="obj.Quantity" type="number"> 
 
     </td> 
 
     <td> 
 
      <span ng-model="obj.ListPrice">{{obj.ListPrice}}</span> 
 
     </td> 
 
     <td> 
 
      <input type="number" ng-value="obj.Cost = obj.Quantity * obj.ListPrice"> 
 
     </td> 
 
     </tr> 
 
    </table> 
 
    </div> 
 

 
</body>

+1

あなたの時間をありがとう..私は$ scope.total + = arr.costを行っていました。乾杯.. – Matarishvan

関連する問題