3

私の質問はorderBy multiple fields in Angularと同じではありません。Angular ng-repeat order複数のフィールドを1つのフィールドとして使用

私の配列は、いくつかの

{ 
    estimatedStartDate : "..." 
} 

を持つオブジェクトを持っており、いくつかは持っている:

{ 
    actualStartDate : "..." 
} 

だから、両方のフィールドを考慮しORDERBYする方法があります。

orderBy:['estimatedStartDate','actualStartDate'] 

^これは機能しません。ここで

はフィドルです:http://jsfiddle.net/g201tudg/1/

これらのフィールドの両方が同じであり、その後、並べ替えのようなので、ふり?

答えて

3

は、あなたのコントローラにこのような機能を追加します。次に

$scope.sortByEitherDate = function(row) { 
    if (row.actualStartDate) { 
     return row.actualStartDate; 
    } 
    return row.estimatedStartDate; 
} 

ORDERBYと、それによって順:sortByEitherDate

作業フィドル:http://jsfiddle.net/g201tudg/4/

+1

:ここ

は正しく動作し、編集されたバイオリンです。 –

+0

ありがとうございます。それを私が直した。 –

+0

これをチェックすることができます:http://jsfiddle.net/g201tudg/3/ まだ並べ替えません –

0

あなたは、並べ替え、カスタムのOrderBy使用することができます。

<tr ng-repeat="contact in contacts | orderBy:randomSort"> 

$scope.randomSort = function(contact) { 
    // your condition 
}; 
1

あなたは、独自のカスタムオーダー関数を書くことができます。それはあなたのカードのパラメータをとり、それらのフィールドのいずれかを返します。

JS

$scope.sort = function(card) { 
     return card.actualStartDate !== undefined ? card.actualStartDate : card.estimatedStartDate; 
    } 

HTML:私の経験によって

<div ng-repeat="card in myCards | orderBy:sort">...</div> 
0

は、角度ngRepeat順はので、あなたの問題を修正NULLとして不足しているメンバーを追加し、未定義の値が好きではありません。

ところで、あなたは "doc"について言及する必要はありません。メンバーを書くだけで十分です。

また、カスタムソート方法を記述すると、クライアントリソースが多く消費されます。あなたは `row.`が欠落している第二のリターンでhttp://jsfiddle.net/g201tudg/2/

+0

ドキュメントを削除していただきありがとうございます。それは私のカスタムコードの一部でした。あなたのフィドルはうまくいきません。 B = 1、E = 2などから1 2 3 4 5が見えるはずです –

関連する問題