2017-05-26 8 views
0

です。現在、平均はHTMLコードで計算されています。 ユーザーの入力が変更された場合、平均が破損します。私は、一人一人のための平均更新をするために何ができ、ヒンディー語/ 100または英語/ 100のユーザー入力に応じて平均/ 100を変更したい

コントローラ

var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope) 
{ 
$scope.names = [ 
    {name:'Priya',age:'19',gender:'Female',English:x[0], Hindi:x[1]}, 
    ... 
    ... 
    {name:'Jiah', age:'18', gender:'Female',English:x[18],Hindi:x[19]} 
    ]; 

$scope.sortColumn ="name"; 

$scope.$watch('names', function(newVal) { 
    var total = 0; 
    angular.forEach(newVal, function(x) { 
     total += parseInt(x.English) + parseInt(x.Hindi); 
    }); 
    $scope.total = total 
}, true); 


$scope.delete = function (name) 
{ 
    $scope.names.splice($scope.names.indexOf(name), 1); 
} 
}); 

HTML これは、私は平均を変更したいコードです:

<table>  
     <th>NAME</th> 
     <th>AGE</th> 
     <th>GENDER</th> 
     <th>ENGLISH/100</th> 
     <th>HINDI/100</th> 
     <th>AVERAGE/100</th> 

    <tr ng-repeat ="x in names | orderBy:sortColumn"> 
     <td>{{x.name}}</td> 
     <td>{{x.age}}</td> 
     <td>{{x.gender}}</td> 
     <td><input type="text" ng-model="x.English"></td> 
     <td><input type="text" ng-model="x.Hindi"></td> 
     <td ng-bind="avg=(x.English+x.Hindi)/2">{{avg}}</td> 
     <td> 
      <button><a href="" ng-click="delete(x)" style="text-decoration:none;">Delete</a></button> 
     </td> 
    </tr> 
</table> 

答えて

0

x.Englishおよびx.Hindiが文字列値として入力されているため、解析する必要があります。

<td ng-bind="avg=(parseFloat(x.English)+parseFloat(x.Hindi))/2">{{avg}}</td> 

アンギュラエクスプレッションではjavascriptを使用できないため、元の関数への参照を設定する必要があります。

$scope.parseFloat = parseFloat; 

回避策として、解析に乗算を使用することもできます。

<td ng-bind="avg=(x.English*1+x.Hindi*1)/2">{{avg}}</td> 
+0

が私にはNaNを与える見る

$scope.avg = function(e, h){ if(!h) h=0; if(!e) e=0; return (parseInt(h)+parseInt(e))/2; } 

をあなたが行う必要があると信じている変更? –

+0

私の更新された答えを見てください。 –

0

あなたは、角の式でparseInt()機能を使用することはできません、あなたはavgを計算するメソッドを作成する必要があります。

コールのような観点から方法:

<td>{{avg(x.English, x.Hindi)}}</td> 

と、コントローラ内の平均値を返すメソッド定義:他があり、このplunker

関連する問題