2016-09-08 7 views
0

のソート2層、IはNGリピートのために使用される次のコレクションを持っている:例えばNGリピート

$scope.pokedex = [{ 
    type: "Fire", 
    pokemon: ["Charizard", "Moltres"] 
},{ 
    type: "Rock", 
    pokemon: [] 
},{ 
    type: "Fighting", 
    pokemon: ["Machamp", "Hitmonchan"] 
},{ 
    type: "Dragon", 
    pokemon: [] 
}]; 

このコレクションには、ng-repeatディレクティブ内で解約します。実際のアプリケーションでは、コレクションはデータベースから取得されるため、ソートされない可能性があります。私はそれを次のようにソートしたい:ポケモンを優先する優先順位ソートタイプ。次に、各グループを名前でソートする。

を編集します。バックエンドデータの内容を明確にする必要があります。上記の例では、$scope.pokedexは一定数のタイプで構成されています。これらはカテゴリです。アプリケーションはデータベースからPokemonを取得し、それに応じて各カテゴリのリストを入力します。ポケモンのリストが空であるかどうかにかかわらず、完全な範囲の型は意図的に配列にハードコードされ、変更されません。

ウェブページはng-repeatを使用して生成される場合、以下のように、所望の最終状態がある:

  • アコーディオンをリストとして体内にヘッダとしてそれぞれのタイプ、及びポケモンのリストが表示されています/表。
  • すべての空のカテゴリは無効になっていますが、まだ見えますが、ヘッダーには特定のCSSフォーマットが指定されており、空ではないカテゴリの下に下にプッシュされます。
  • 空のグループと空でないグループは、個別にカテゴリ/タイプ名でソートされます。

空のグループを下にプッシュし、名前で並べ替える以外はすべて実装されています。これが私の最後の実装要件です。

どうすればいいですか?事前に、またはの間にorderBy、または他の実行可能なソリューションを介して行う方法がありますか?

+0

次のコードは、それがデータベースから来て注文してみてください。バックエンドでもそれを行うことができ、ng-repeat orderByで実行できます。私はdbフェッチ段階でそれを行うことをお勧めします。私が正しく理解しているなら、おそらく望ましい解決策である人名 – holtc

+0

@holtcによって、すべての人とカウントダウン(ポケモン)で一番最初に注文したいと思っていますが、まだプロトタイプの段階ですので、データベースのデータはまだありません。私はデモで使用するためのソリューションが必要です。これを私の質問に更新します。 – thegreatjedi

+0

デモの場合、最終的にフロントエンドがデータを受け取る方法(私が知っているcop-out回答) – holtc

答えて

0

あなたはこのように試すことができます。この

<ul> 
<li ng-repeat="people in peoples | orderObjectBy:'pokemon':true">{{ people.name }}</li> 
</ul> 
+0

ねえ、私は実質的に私の質問を更新しました、見てみましょう! – thegreatjedi

0

クエリで順序を使用することができます

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
     <div ng-app="myApp"> 
 
      
 
      <div ng-controller="pokemonController"> 
 
      
 
      <ul> 
 
       <li ng-repeat="people in peoples | orderBy:['-pokemon.length','name']"> 
 
       
 
       name: {{people.name}} - number of Pokemons: {{people.pokemon.length}} 
 
       
 
       <hr /> 
 
       </li> 
 
      </ul> 
 
      
 
      
 
      </div> 
 
      
 
      
 
     </div> 
 

 

 

 
     <script> 
 
      
 
      var app = angular.module('myApp',[]); 
 
      
 
      app.controller('pokemonController', ['$scope', function($scope){ 
 
      
 
      
 
      $scope.peoples = [{ 
 
      name: "Obama", 
 
      pokemon: ["Charizard", "Dragonite", "Moltres"] 
 
     },{ 
 
      name: "Merkel", 
 
      pokemon: [] 
 
     },{ 
 
      name: "Putin", 
 
      pokemon: ["Machamp", "Hitmonchan"] 
 
     },{ 
 
      name: "Kim", 
 
      pokemon: [] 
 
     }]; 
 
      
 
      
 
      }]); 
 
      
 
      </script>

+0

ねえ、私は実質的に私の質問を更新しました、もう一度見てみましょう! – thegreatjedi