2016-09-13 3 views
0

Ich bin relativ neu in AngularJS. Könnte etwas HilfeSortierung Angularjs ng-Wiederholung nach Datum

verwende ich eine Tabelle

mit den folgenden Informationen haben
<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>date</td> 
</tr> 
</tabe> 

Und der js-Code ist als (nach den Controller-Verbindungen) folgt

$scope.sortType = ''; 
$scope.sortReverse = false; 

Das perfekt für den Aufstieg arbeitet und absteigend beim Sortieren des Namens.

Leider funktioniert es ähnlich bei Datum (es wird alphabetisch anstatt nach Datum sortiert).

Das Datumsformat ich aus dem Backend (Python) bin immer in diesem Format:

i["date"] = i["date"].strftime("%B %d, %Y") 
September 13, 2016 <-- this format 

Ich verstehe den Fehler, den ich gemacht, aber ich bin nicht in der Lage, die Lösung für sie zu finden.

Wie kann ich nach Datum sortieren?

Vielen Dank im Voraus Jungs.

+0

Idealerweise würden Sie einen Weg finden, um zu bekommen, ein [ 'Date'] (https://developer.mozilla.org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/Date) in das Javascript und verwenden Sie dann angulars [Datum Filter] (https://docs.angularjs.org/api/ng/filter/date) für die Anzeige . Beachten Sie, dass Sie, wenn es einfacher ist, Zeitstempel oder ISO-formatierte Datumszeichenfolgen senden können, und der Datumsfilter wird immer noch gut funktionieren (Sie müssen _in _deed_ selbst nicht in ein Javascript-Datum konvertieren). – mgilson

Antwort

1

Idealerweise haben Sie ein sortierbares Objekt für das Datum. Ein Kandidat ist ein isoformatted Datum:

i["date"] = i["date"].isoformat() 

Jetzt Sortierung sollte gut funktionieren, aber es wird wackelig angezeigt. So benötigen Sie einen Datumsfilter verwenden, um es zu formatieren auf der Benutzeroberfläche:

<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>{{x.date | date : 'MMMM d, yyyy'}}</td> 
</tr> 
</table> 
+0

Du bist ein Retter .. Danke, mgilson! –

0

Wie Sie festgestellt haben, ist der Wert, den Sie erhalten, eine Zeichenfolge und daher alphabetisch sortiert. Sie müssen es vorher in Date() konvertieren. Also im Grunde, was Sie brauchen, ist eine Schleife über die Anordnung von Daten, die Sie bekommen, und fügen Sie eine neue Eigenschaft (oder ersetzen Sie bestehende) mit einem neuen Date-Objekt:

referral.forEach((ref) => { 
    ref.date_obj = new Date(ref.date) 
}; 

ich gerade überprüft, JavaScript scheint Format zu parsen " 13. September 2016 "Ziemlich gut.

+0

Aber das _could_ kann ziemlich Browser-abhängig sein, da es nicht wirklich gut standardisiert ist, welche Formate "Date" anders als ISO analysieren kann. – mgilson

+0

Dann können wir die Datumszeichenfolge manuell umformatieren, um sie in "2016-09-13" zu verwandeln. Aber ich denke, es wäre viel einfacher, stattdessen das Rückgabeformat am Backend zu ändern. – EternalLight

Verwandte Themen