2017-01-11 6 views
0

これらのパーセンテージをソートしようとしているような表がありますが、私はparseFloatとanglejを確実に確認するいくつかの方法を試しましたが、期待通りにソートされていません。 0)は正常にそれらを注文するでしょう。AngularJS orderByパーセント

[ 
    {percentage: 8.82} 
    {percentage: 0.00} 
    {percentage: 11.36} 
    {percentage: 21.88} 
    {percentage: 25.74} 
    {percentage: 22.22} 
] 

次の2つのスクリーンショットは、パーセンテージがソートされた2つの注文を示しています。

enter image description here enter image description here

<tr ng-repeat="p in percentages|orderBy:orderByField:reverseSort"> 
    <td>{{p.percentage}}%</td> 
</tr> 

percentages私はパーセンテージを作成し、文字列を返すtoFixed(2)機能を使用し、私のnodejsサーバー、から来ています。しかし、私は文字列の上にparseFloat()を使用しようとしました(両方がサーバから戻ってくる前と後)。

reverseSortは、コントローラのブール値で、列名をクリックすると設定されます。

orderByFieldは、reverseSortと同様に設定された文字列の値です。

(それは活字体である)JSONで返されるサーバコードを求め@Lorenについては

 for(let row of rows){ 
      row.percentage= parseFloat(((row.prop1/ (row.prop2 + row.prop1))* 100).toFixed(2)); 
     } 
+0

サーバからのデータは 'number'のオブジェクト/' percentage'プロパティのオブジェクトですか? –

+1

このplunkrで再現できません:https://plnkr.co/edit/wzo0n94I0tIFJMha2oJk?p=preview; 'orderByField'が文字列に正しく設定されていますか?これは正確に ''パーセント ''と等しくなければなりません。 –

+0

@MikeMcCaughanはちょうどウォッチャーをセットアップし、それらがまったく同じであることを確認しようとしていましたが、もちろん私には手紙がありませんでした...いくつかの事柄を再テストし、動作するかどうかを確認します。それがうまくいくなら私はおそらく文法エラーを有効なプログラミングの質問とみなしているとは思わないので、私の質問を削除するでしょう。それを私に指摘してくれてありがとう。 –

答えて

1

をAngulars $フィルタ(「ORDERBY」)を使用しますが、この場合には、オブジェクトのプロパティで並べ替えることができます「パーセンテージ」である。 https://docs.angularjs.org/api/ng/filter/orderBy

var app = angular.module("myApp", []); 
 

 
app.controller("myCtrl", function($scope, $http, $window, $timeout, $filter) { 
 
\t $scope.percentages = [ 
 
\t \t {percentage: 8.82}, 
 
\t \t {percentage: 0.00}, 
 
\t \t {percentage: 11.36}, 
 
\t \t {percentage: 21.88}, 
 
\t \t {percentage: 25.74}, 
 
\t \t {percentage: 22.22} 
 
\t ]; 
 

 

 
\t $scope.sort = function(click) { 
 
\t \t if(click == true) { 
 
\t \t \t $scope.percentages = $filter('orderBy')($scope.percentages, 'percentage'); 
 
\t \t } 
 
       else { 
 
         $scope.percentages = $filter('orderBy')($scope.percentages, 'percentage', true); 
 
       } 
 
\t } 
 

 
});
.header:hover { 
 
    cursor: pointer; 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0-rc.2/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
<table class='SO' ng-init='clicked = false'> 
 
\t <tbody> 
 
\t \t <tr> 
 
\t \t \t <th class='header' ng-click='clicked = !clicked; sort(clicked);'>Percentage Failed</th> 
 
\t \t </tr> 
 
\t \t <tr ng-repeat="data in percentages"> 
 
\t \t \t <td>{{data.percentage}}</td> 
 
\t \t </tr> 
 
\t </tbody> 
 
</table> 
 

 
</div>

+0

申し訳ありませんが、これには説明がなく、私の問題を完全には解決しません。しかし、答えに感謝します。 –

0

がどのようにparseFloatはを実行していますか?

for (var i = 0; i < $scope.percentages.length; i++) { 
    $scope.percentages[i].percentage = 
     parseFloat($scope.percentages[i].percentage); 
} 

参照してください:https://plnkr.co/edit/cybPTR63KyCqzVT2bDRK?p=preview

をそれはあなたがサーバから取得して、JSでの山車にそれらを解析したものですので、私は事前にご使用のアレイの文字列を作った。このようなものを使用することについては何

サーバーから数値をフェッチするたびに(つまり、最初の時刻以降に)このコードを実行する必要があります。また、結果が取得された後(つまり、成功コールバックで)、リクエストの直後ではなく、それがまだ数字を持たないので、実行したことを確認してください。

+0

はい、これは私がやったことです。私はサーバーから戻った後、私のコントローラで解析しなければならなかった。 –

+0

しかし、それは動作していないのですか?それとも、それは今働いており、あなたはそれをサーバー側で今修正しようとしていますか? – Loren

+0

それはクライアント側で動作しますが、誰かがサーバー側のソリューションを提供していれば、私はそれを受け入れることができます。 –

関連する問題