Ich kann diesen Code nicht von Angualr 1 nach Angular 2 übersetzen:
ng-repeat="todo in todos | orderBy: 'completed'"
Dies ist, was ich nach der Antwort des Thierry Templier getan habe:
Komponentenvorlage:
*ngFor="#todo of todos | sort"
Komponentencode:
@Component({
selector: 'my-app',
templateUrl: "./app/todo-list.component.html",
providers: [TodoService],
pipes: [ TodosSortPipe ]
})
Pipe Code:
import { Pipe } from "angular2/core";
import {Todo} from './todo';
@Pipe({
name: "sort"
})
export class TodosSortPipe {
transform(array: Array<Todo>, args: string): Array<Todo> {
array.sort((a: any, b: any) => {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
return array;
}
}
Ich versuche, ein Array von Todo
s zu sortieren , geordnet nach der Eigenschaft completed
. Erst todo.completed = false
und dann die todo.complete = true
.
Ich verstehe die transform
Methode und die Übergabe der Argumente in dieser Methode und in der sort
Methode nicht sehr gut .
Was ist das args: string
Argument? Was sind a
und b
woher sie kommen?
angular
angular2-template
angular-pipe
Alexander Abakumov
quelle
quelle
Antworten:
Ich habe die Antwort von @Thierry Templier so geändert, dass die Pipe benutzerdefinierte Objekte in Winkel 4 sortieren kann:
Und um es zu benutzen:
Hoffentlich hilft das jemandem.
quelle
The pipe 'sort' could not be found
. Kann ich irgendwie Rohr in meine Komponente injizieren, wie in Winkel-2-Rohren: [ArraySortPipe]?Die vollständige Diskussion finden Sie unter https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe . Dieses Zitat ist am relevantesten. Grundsätzlich sollte bei großen Apps, die aggressiv minimiert werden sollten, die Filter- und Sortierlogik auf die Komponente selbst verschoben werden.
quelle
filteredHeroes
und erwähnt wirdsortedHeroes
, besteht die Idee darin, dass Sie beim Initialisieren der Komponente eine Sortier- / Filterlogik ausführen (möglicherweise eine Methode von ngOnInit aufrufen) und diese Eigenschaft dann mit den sortierten / gefilterten Ergebnissen festlegen Führen Sie die Logik nur erneut aus / aktualisieren Sie die Eigenschaft, wenn etwas einen Bedarf auslöst (z. B. löst eine Benutzerinteraktion einen AJAX-Aufruf aus, um mehr Helden zu erhalten, oder der Benutzer klickt auf ein Kontrollkästchen, um die Hälfte davon nach bestimmten Kriterien usw.Sie können hierfür eine benutzerdefinierte Pipe implementieren, die die
sort
Methode der Arrays nutzt :Und verwenden Sie dann dieses Rohr wie unten beschrieben. Vergessen Sie nicht, Ihre Pipe im
pipes
Attribut der Komponente anzugeben :Es ist ein einfaches Beispiel für Arrays mit Zeichenfolgenwerten, aber Sie können eine erweiterte Sortierverarbeitung durchführen (basierend auf Objektattributen im Fall eines Objektarrays, basierend auf Sortierparametern, ...).
Hier ist ein Plunkr dafür: https://plnkr.co/edit/WbzqDDOqN1oAhvqMkQRQ?p=preview .
Hoffe es hilft dir, Thierry
quelle
sort
Methode eine Methode des JavaScript-Array
Objekts. Siehe diesen Link: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .pipes: [..]
Erklärung ist nicht mehr gültig (und nicht mehr erforderlich)Aktualisierte OrderByPipe: Fehler beim Sortieren von Zeichenfolgen behoben.
Erstellen Sie eine OrderByPipe-Klasse:
in Ihrem Controller:
oder in deinem
in Ihrem HTML:
quelle
Angular wird nicht sofort mit einem orderBy-Filter geliefert, aber wenn wir uns für einen entscheiden, können wir problemlos einen erstellen. Es gibt jedoch einige Einschränkungen, die wir beachten müssen, um Geschwindigkeit und Minimierung zu erreichen. Siehe unten.
Eine einfache Pfeife würde ungefähr so aussehen.
Diese Pipe akzeptiert eine Sortierfunktion (
fn
) und gibt ihr einen Standardwert, mit dem ein Array von Grundelementen auf sinnvolle Weise sortiert wird. Wir haben die Möglichkeit, diese Sortierfunktion zu überschreiben, wenn wir dies wünschen.Ein Attributname wird nicht als Zeichenfolge akzeptiert, da Attributnamen einer Minimierung unterliegen. Sie ändern sich, wenn wir unseren Code minimieren, aber Minifizierer sind nicht intelligent genug, um auch den Wert in der Vorlagenzeichenfolge zu minimieren.
Sortieren von Grundelementen (Zahlen und Zeichenfolgen)
Wir könnten dies verwenden, um ein Array von Zahlen oder Zeichenfolgen mit dem Standardkomparator zu sortieren:
Sortieren eines Arrays von Objekten
Wenn wir ein Array von Objekten sortieren möchten, können wir ihm eine Komparatorfunktion geben.
Vorsichtsmaßnahmen - reine oder unreine Rohre
Angular 2 hat ein Konzept von reinen und unreinen Rohren.
Eine reine Pipe optimiert die Änderungserkennung anhand der Objektidentität. Dies bedeutet, dass die Pipe nur ausgeführt wird, wenn das Eingabeobjekt seine Identität ändert, z. B. wenn wir dem Array ein neues Element hinzufügen. Es wird nicht in Objekte absteigen. Dies bedeutet, dass wenn wir ein verschachteltes Attribut ändern:
this.cats[2].name = "Fluffy"
Beispielsweise wird die Pipe nicht erneut ausgeführt. Dies hilft Angular, schnell zu sein. Winkelrohre sind standardmäßig rein.Ein unreines Rohr hingegen überprüft Objektattribute. Dies macht es möglicherweise viel langsamer. Da nicht garantiert werden kann, was die Rohrleitungsfunktion tut (z. B. je nach Tageszeit unterschiedlich sortiert), wird jedes Mal, wenn ein asynchrones Ereignis auftritt , eine unreine Rohrleitung ausgeführt. Dies verlangsamt Ihre App erheblich, wenn das Array groß ist.
Das Rohr oben ist rein. Dies bedeutet, dass es nur ausgeführt wird, wenn die Objekte im Array unveränderlich sind. Wenn Sie eine Katze wechseln, müssen Sie das gesamte Katzenobjekt durch ein neues ersetzen.
Wir können das Obige in ein unreines Rohr ändern, indem wir das reine Attribut festlegen:
Diese Pipe steigt in Objekte ab, ist jedoch langsamer. Mit Vorsicht verwenden.
quelle
Ich habe eine OrderBy-Pipe erstellt, die genau das tut, was Sie brauchen. Es unterstützt auch das Sortieren nach mehreren Spalten einer Aufzählung von Objekten.
Diese Pipe ermöglicht das Hinzufügen weiterer Elemente zum Array nach dem Rendern der Seite und sortiert das Array mit den Aktualisierungen dynamisch.
Ich habe hier einen Bericht über den Prozess .
Und hier ist eine funktionierende Demo: http://fuelinteractive.github.io/fuel-ui/#/pipe/orderby und https://plnkr.co/edit/DHLVc0?p=info
quelle
Empfehlen Sie, dass Sie lodash mit eckigen verwenden, dann wird Ihre Pfeife als nächstes sein:
und benutze es in HTML wie
und vergessen Sie nicht, Pipe zu Ihrem Modul hinzuzufügen
quelle
Dies funktioniert für jedes Feld, das Sie übergeben. ( WICHTIG: Es wird nur alphabetisch sortiert. Wenn Sie also ein Datum übergeben, wird es als Alphabet und nicht als Datum sortiert.)
quelle
@Component
keinepipes
Eigenschaft vorhanden ist.Dies ist ein guter Ersatz für AngularJs Orderby- Rohr in Winkel 4 . Einfach und leicht zu bedienen.
Dies ist die Github-URL für weitere Informationen unter https://github.com/VadimDez/ngx-order-pipe
quelle
Da wir wissen, dass Filter und Reihenfolge nach aus ANGULAR 2 entfernt sind und wir unsere eigenen schreiben müssen, finden Sie hier ein gutes Beispiel für Plunker und ausführliche Artikel
Es wurde sowohl Filter als auch Orderby verwendet. Hier ist der Code für Order Pipe
quelle
Sie können dies für Objekte verwenden:
quelle
Fügen Sie in package.json Folgendes hinzu: (Diese Version ist für Angular 2 in Ordnung):
In Ihrem Typoskript-Modul (und importiert das Array):
quelle
quelle
In der aktuellen Version von Angular2 werden orderBy- und ArraySort-Pipes nicht unterstützt. Sie müssen dafür einige benutzerdefinierte Pipes schreiben / verwenden.
quelle
Für die Angular 5+ Version können wir das Paket ngx-order-pipe verwenden
Link zum Quell-Tutorial
Installationspaket
In Apps-Modul importieren
überall verwenden
quelle
orderby Pipe in Angular JS wird unterstützt, Angular (höhere Versionen) jedoch nicht . Die Details, die zur Erhöhung der Leistungsgeschwindigkeit besprochen wurden, sind veraltet.
https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe
quelle
quelle