Angularjs - Sortierung nach Filter im Bereich der Steuerung

8

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:

%Vor%

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:

%Vor%

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.

    
Amyth 17.12.2013, 10:45
quelle

1 Antwort

5

Ok, das habe ich mit $broadcast und $on wie folgt gelöst:

%Vor%     
Amyth 17.12.2013, 11:06
quelle