Ich habe ein Array von Objekten, d. h. gefiltert und seitenweise, und jetzt möchte ich die Listenelemente nach verschiedenen Objektattributen ordnen.
Ich habe den orderBy
Filter wie folgt versucht:
Dies scheint gut zu funktionieren, indem Sie auf den Title
-Link klicken, die Zeile alphabetisch sortieren oder abhängig vom aktuellen Status rückwärts alphabetisch wechseln.
Aber das Problem ist, dass nur die pagedItems
sortiert werden, was sinnvoll ist, da wir den orderBy
Filter auf pagedItems
anwenden. Was ich erreichen möchte, ist, die ganze Menge von Gegenständen (nicht nur augenblicklich gesuchte Gegenstände) zu bestellen, wenn der Filter angewendet wird.
Um dies zu erreichen, dachte ich, ich würde eine Methode im Controller-Bereich verwenden. also änderte ich das oben auf:
%Vor% Die Methode sortItems
funktioniert und ändert die Reihenfolge, aber die Elemente in der Ansicht werden nicht aktualisiert, da der $watch
-Code nicht ausgelöst wird. Ich nahm an, dass es vielleicht nicht geändert wird, weil die Daten in $scope.filtered
nicht geändert werden und nur die Indizes geändert werden. Also habe ich ein Element am Ende des Arrays hinzugefügt und geleert:
Nun funktioniert alles wie erwartet, aber ich kann kein leeres Objekt im Array behalten, da es sich auf die angezeigten Elemente, die Anzahl und die Daten auswirkt. Also dachte ich, ich würde einen leeren Gegenstand hinzufügen und entfernen. Also änderte das oben zu:
%Vor% Aber rate mal, was der $watch
code nicht mehr ausgelöst hat.
Frage
Meine Frage ist, ob $watch
nach Änderungen in einem Array sucht, basierend auf seiner Länge? Wenn ja, was ist der bestmögliche Weg, um das zu erreichen, was ich versuche? Jede Hilfe wäre willkommen.
Tags und Links angularjs angular-ui pagination watch angularjs-orderby