私はこのようなオブジェクトを持っています:
students = {name: 'Aa_Student', class: 'A_Class'},
{name: 'Ab_Student', class: 'A_Class'},
{name: 'Ac_Student', class: 'B_Class'},
{name: 'Ba_Student', class: 'B_Class'},
{name: 'Bb_Student', class: 'C_Class'},
{name: 'Bc_Student', class: 'C_Class'}
生徒オブジェクトがシャッフルされているとしましょう。 ng-repeatを使用してデータを表示しています。オブジェクトをカスタムの順序で並べ替えたい。
たとえば、次のようなデータを表示したいとします。
Name Class
-----------------------------
Ac_Student B_Class
Ba_Student B_Class
Aa_Student A_Class
Ab_Student A_Class
Bb_Student C_Class
Bc_Student C_Class
基本的に、学生のクラスで注文したいのですが、最初にB_Class、A_Class、C_Classの順になっています。また、学生名でアルファベット順に並べたい。これどうやってするの?
HTML:
<table>
<tr ng-repeat="student in students | orderBy:customOrder">
...
</tr>
</table>
コントローラ:
$scope.customOrder = function(student) {
$scope.students = $filter('orderBy')(student, function() {
});
};
こんにちは、カスタムソートフィルターを作成できます。ここを参照してください http://jsbin.com/lizesuli/1/edit
html:
<p ng-repeat="s in students |customSorter:'class'">{{s.name}} - {{s.class}} </p>
</div>
angularjsフィルター:
app.filter('customSorter', function() {
function CustomOrder(item) {
switch(item) {
case 'A_Class':
return 2;
case 'B_Class':
return 1;
case 'C_Class':
return 3;
}
}
return function(items, field) {
var filtered = [];
angular.forEach(items, function(item) {
filtered.Push(item);
});
filtered.sort(function (a, b) {
return (CustomOrder(a.class) > CustomOrder(b.class) ? 1 : -1);
});
return filtered;
};
});
これは古いですが、他の人に役立つかもしれません...
簡単なカスタムソート関数を作成することもできます。 「あまりフィルターではない」:
$scope.customOrder = function (item) {
switch (item) {
case 'A_Class':
return 2;
case 'B_Class':
return 1;
case 'C_Class':
return 3;
}
};
そして、あなたがしたいように使用します:
<table>
<tr ng-repeat="student in students | orderBy:customOrder">
...
</tr>