0

div に ng-repeat 機能を実装しようとしています。そのためには、最初にデータを並べ替え (オブジェクトから提供されたランクに従って)、次に div に名前を付ける必要があります。だから私はカスタム OrderBy 関数を作成しています。私のソート機能はうまく機能します。ただし、divの順序は常に同じです。(実際、必要なものとは正反対です)。リバース機能を使用してみましたが、うまくいきません。

私のソートコードは次のようになります。

var res = {        
        "Toyota": 2,
        "Ford": 1,
        "Chrysler": 4,
        "Hyundai": 3,
        "Nissan": 5
};

sortedVal = Object.keys(res).sort(function (a, b){
    return res[a] - res[b];
});

私のHTML divは次のようになります。

<div class="card" ng-repeat="name in data | orderBy: sortedVal ">

コンソールに正しい出力が表示されます。ただし、何をしても、divは常に以下の順序で配置されます。

日産、クライスラー、ヒュンダイ、トヨタ、フォード。

フォード、トヨタ、ヒュンダイ、クライスラー、日産の順に必要です。

注: 「データ内の名前」の部分は気にしないでください。問題なく動作します。「OrderBy」に問題があります。

4

3 に答える 3

0

sortedValコントローラーのスコープに追加する必要があり、ビューで使用できるようになります。

var res = {        
        "Toyota": 2,
        "Ford": 1,
        "Chrysler": 4,
        "Hyundai": 3,
        "Nissan": 5
};

$scope.sortedVal = Object.keys(res).sort(function (a, b){
    return res[a] - res[b];
});

または、オブジェクトを値順に並べ替えるカスタム フィルターを作成することもできます。このようなもの。

HTML

<div class="card" ng-repeat="(key, value) in data | orderObjectByValue">
      {{key}} {{value}}
</div>

JS

app.filter('orderObjectByValue', function() {
  return function(items) {
    var filtered = Object.keys(items).sort(function (a, b){
        return items[a] - items[b];
    });
    return filtered;
  };
});

デモ http://plnkr.co/edit/jdIf9hjiUrR6la02aVjA?p=preview

于 2015-06-10T18:41:51.077 に答える
0

AngularJS orderBy フィルターは配列のみをサポートし、オブジェクトはサポートしません。したがって、独自の小さなフィルターを作成する必要があります。次のフィドルを実行してください。

http://jsfiddle.net/4tkj8/1/

于 2015-06-10T18:43:05.660 に答える