sortiert Werte eines Hash-Objekts in ngRepeat - angularJS

8

Ich habe ein Objekt wie dieses:

%Vor%

Ich zeige dies mit ngRepeat an. Ich kann nicht nach dateReleased sortieren. Umgekehrt funktioniert auch die Bestellung nicht. Mein ngRepeat sieht folgendermaßen aus:

%Vor%     
Chai Nadig 25.11.2012, 15:23
quelle

4 Antworten

5

Wenn Sie in der Dokumentation nachschauen, kann der Ausdruck in orderBy eine -Funktion sein , eine string oder ein Array . Daher benötigen Sie dateReleased als Zeichenfolge: 'dateReleased'

Sie müssen auch Ihre Telefone Objekt ein Array sein.

Versuchen Sie:

%Vor%     
lgomezma 25.11.2012, 18:12
quelle
12

Während ngRepeat in Ihrem Beispiel ein Hash-Objekt wie $scope.phones iterieren kann, funktioniert der integrierte orderBy -Filter nicht. Ich glaube, das liegt an der Art und Weise, wie Objekte gespeichert werden. Wie andere bemerkt haben, müssen Sie den Hash in ein Array konvertieren. Während Sie dies mit den oben vorgeschlagenen Methoden tun können, verwende ich lieber einen benutzerdefinierten Filter. Dies gibt mir den Vorteil, dass ich meinen Hash nicht direkt ändern muss und den Filter mit anderen Hashes wiederverwenden kann.

%Vor%

Dieser Filter konvertiert das Objekt in ein Standard-Array und sortiert es nach dem von Ihnen angegebenen Feld. Sie können den orderObjectBy -Filter genauso verwenden wie orderBy , einschließlich eines booleschen Werts hinter dem Feldnamen, um anzugeben, ob die Reihenfolge umgekehrt werden soll. Mit anderen Worten, false ist aufsteigend, true ist absteigend.

%Vor%

Ich habe einen Beitrag in meinem Blog zu diesem Thema.

    
Justin Klemm 17.09.2013 19:19
quelle
3

Die beiden anderen Antworten bringen dich dahin, aber nicht den ganzen Weg ...

Sie müssen eine Funktion in Ihrem Bereich erstellen, die das Objekt in ein Array wie folgt konvertiert:

%Vor%

Dann würden Sie das anstelle Ihres Objekts in Ihrem ngRepeat nennen:

%Vor%

Außerdem: Beachten Sie, dass 'dateReleased' eine Zeichenkette ist, also weiß es, dass $ eval diese Zeichenkette vom aktuellen Element entfernt, andernfalls wird es das übergeordnete $ scope.dateReleased überprüfen, das nicht existiert.

Hier ist ein Plunk für was ich denke, dass du versuchst zu tun

BEARBEITEN: Sie können das Objekt auch in ein Array "konvertieren" und es auf dem $ scope speichern, wenn Sie sich Sorgen machen, dass die Funktion zu "teuer" ist, aber das sollte kein Problem sein, weil Sie eine Client-App für einen Benutzer und keine Server-Anwendung für viele Benutzer entwickeln, was bedeutet, dass Sie ein wenig Spielraum für "teuer" haben. (Was es nicht sowieso sein wird)

    
Ben Lesh 27.11.2012 00:10
quelle
2

Zuerst müssen Sie verstehen, dass ng:filter und ng:orderBy mit Arrays (einer geordneten Sammlung von Elementen) arbeiten, aber Sie versuchen, sie für Objekte (_un_ordered Sammlung von Elementen) zu verwenden. Ein möglicher Ansatz besteht darin, alle Objekte in einem Array zu sammeln und dann stattdessen mit ng-repeat fortzufahren. So:

%Vor%     
raina77ow 25.11.2012 18:11
quelle

Tags und Links