Je ne suis pas en mesure de traduire ce code d'Angualr 1 à Angular 2:
ng-repeat="todo in todos | orderBy: 'completed'"
Voici ce que j'ai fait suite à la réponse de Thierry Templier:
Modèle de composant:
*ngFor="#todo of todos | sort"
Code composant:
@Component({
selector: 'my-app',
templateUrl: "./app/todo-list.component.html",
providers: [TodoService],
pipes: [ TodosSortPipe ]
})
Code de conduite:
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;
}
}
J'essaye de trier un tableau de Todo
s, triés par la propriété completed
. D'abord todo.completed = false
, puis le todo.complete = true
.
Je ne comprends pas très bien la transform
méthode et comment passer les arguments dans cette méthode et dans la sort
méthode.
Quel est l' args: string
argument? Que sont a
- b
ils et d'où viennent-ils?
angular
angular2-template
angular-pipe
Alexandre Abakumov
la source
la source
Réponses:
J'ai modifié la réponse de @Thierry Templier pour que le tube puisse trier les objets personnalisés en angulaire 4:
Et pour l'utiliser:
Espérons que cela aide quelqu'un.
la source
The pipe 'sort' could not be found
. Puis-je en quelque sorte injecter un tuyau dans mon composant comme dans 2 tuyaux angulaires: [ArraySortPipe]?Veuillez consulter https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe pour la discussion complète. Cette citation est la plus pertinente. Fondamentalement, pour les applications à grande échelle qui doivent être minimisées de manière agressive, la logique de filtrage et de tri doit se déplacer vers le composant lui-même.
la source
filteredHeroes
etsortedHeroes
, je pense que l'idée est que lors de l'initialisation du composant, vous exécuteriez une logique de tri / filtrage (peut-être en appelant une méthode à partir de ngOnInit), puis définissant cette propriété avec les résultats triés / filtrés, et Ne relancez la logique / mettez à jour la propriété que s'il y a quelque chose qui déclenche un besoin (par exemple, une interaction de l'utilisateur déclenche un appel AJAX pour obtenir plus de héros, ou l'utilisateur clique sur une case à cocher pour en filtrer la moitié en fonction de certains critères, etc.)Vous pouvez implémenter un tube personnalisé pour cela qui exploite la
sort
méthode des tableaux:Et utilisez ensuite ce tuyau comme décrit ci-dessous. N'oubliez pas de spécifier votre pipe dans l'
pipes
attribut du composant:C'est un exemple simple pour les tableaux avec des valeurs de chaîne, mais vous pouvez avoir un traitement de tri avancé (basé sur des attributs d'objet dans le cas d'un tableau d'objets, basé sur des paramètres de tri, ...).
Voici un plunkr pour cela: https://plnkr.co/edit/WbzqDDOqN1oAhvqMkQRQ?p=preview .
J'espère que ça vous aide, Thierry
la source
sort
méthode est une méthode de l'Array
objet JavaScript . Voir ce lien: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .pipes: [..]
déclaration n'est plus valide (et n'est plus nécessaire)OrderByPipe mis à jour: correction des chaînes de non tri.
créer une classe OrderByPipe:
dans votre contrôleur:
ou dans votre
dans votre html:
la source
Angular n'est pas livré avec un filtre orderBy prêt à l'emploi, mais si nous décidons d'en avoir besoin, nous pouvons facilement en créer un. Il y a cependant quelques mises en garde dont nous devons tenir compte concernant la vitesse et la minification. Voir ci-dessous.
Un simple tuyau ressemblerait à quelque chose comme ça.
Ce tube accepte une fonction de tri (
fn
) et lui donne une valeur par défaut qui triera un tableau de primitives de manière sensible. Nous avons la possibilité de remplacer cette fonction de tri si nous le souhaitons.Il n'accepte pas un nom d'attribut sous forme de chaîne, car les noms d'attribut sont sujets à une minification. Ils changeront lorsque nous réduirons notre code, mais les minificateurs ne sont pas assez intelligents pour minimiser également la valeur dans la chaîne de modèle.
Tri des primitives (nombres et chaînes)
Nous pourrions l'utiliser pour trier un tableau de nombres ou de chaînes en utilisant le comparateur par défaut:
Trier un tableau d'objets
Si nous voulons trier un tableau d'objets, nous pouvons lui donner une fonction de comparaison.
Mises en garde - tuyaux purs ou impurs
Angular 2 a un concept de tuyaux purs et impurs.
Un canal pur optimise la détection des changements en utilisant l'identité d'objet. Cela signifie que le tube ne fonctionnera que si l'objet d'entrée change d'identité, par exemple si nous ajoutons un nouvel élément au tableau. Il ne descendra pas dans les objets. Cela signifie que si nous modifions un attribut imbriqué:
this.cats[2].name = "Fluffy"
par exemple, le tube ne sera pas réexécuté. Cela aide Angular à être rapide. Les tuyaux angulaires sont purs par défaut.Un tuyau impur vérifiera les attributs des objets. Cela le rend potentiellement beaucoup plus lent. Comme il ne peut pas garantir ce que fera la fonction de canal (peut-être est-il trié différemment en fonction de l'heure de la journée, par exemple), un tuyau impur fonctionnera à chaque fois qu'un événement asynchrone se produit. Cela ralentira considérablement votre application si le tableau est volumineux.
Le tuyau ci-dessus est pur. Cela signifie qu'il ne fonctionnera que lorsque les objets du tableau seront immuables. Si vous changez de chat, vous devez remplacer tout l'objet chat par un nouveau.
Nous pouvons changer ce qui précède en un tuyau impur en définissant l'attribut pur:
Ce tuyau descendra dans les objets, mais sera plus lent. Utiliser avec précaution.
la source
J'ai créé un tube OrderBy qui fait exactement ce dont vous avez besoin. Il prend également en charge la possibilité de trier sur plusieurs colonnes d'un énumérable d'objets.
Ce tube permet d'ajouter plus d'éléments au tableau après le rendu de la page, et triera le tableau avec les mises à jour de manière dynamique.
J'ai un article sur le processus ici .
Et voici une démo fonctionnelle: http://fuelinteractive.github.io/fuel-ui/#/pipe/orderby et https://plnkr.co/edit/DHLVc0?p=info
la source
Je vous recommande d'utiliser du lodash avec angulaire, votre pipe sera la suivante:
et utilisez-le en html comme
et n'oubliez pas d'ajouter Pipe à votre module
la source
Cela fonctionnera pour tous les champs que vous lui transmettez. ( IMPORTANT: il ne classera que par ordre alphabétique, donc si vous passez une date, il le classera comme alphabet et non comme date)
la source
@Component
n'a pas depipes
propriété.C'est un bon remplacement pour AngularJs orderby pipe en angulaire 4 . Facile et simple à utiliser.
Ceci est l'URL github pour plus d'informations https://github.com/VadimDez/ngx-order-pipe
la source
Comme nous savons que le filtre et l'ordre par sont supprimés de ANGULAR 2 et que nous devons écrire les nôtres, voici un bon exemple sur plunker et un article détaillé
Il a utilisé à la fois filtre et orderby, voici le code du tube de commande
la source
Vous pouvez l'utiliser pour les objets:
la source
Dans package.json, ajoutez quelque chose comme (Cette version est ok pour Angular 2):
Dans votre module dactylographié (et importe le tableau):
la source
la source
Dans la version actuelle d'Angular2, les canaux orderBy et ArraySort ne sont pas pris en charge. Vous devez écrire / utiliser des tubes personnalisés pour cela.
la source
Pour la version Angular 5+, nous pouvons utiliser le package ngx-order-pipe
Lien du didacticiel source
Installer le paquet
Importer dans le module des applications
utiliser n'importe où
la source
orderby Pipe dans Angular JS prendra en charge mais Angular (versions supérieures) ne le prendra pas en charge . Veuillez trouver les détails discutés pour augmenter la vitesse de performance de son obsolète.
https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe
la source
la source