OrderBy pipe problème
Je ne suis pas en mesure de traduire ce code à partir de Angualr 1 Angulaire 2:
ng-repeat="todo in todos | orderBy: 'completed'"
C'est ce que j'ai fait à la suite de la Thierry Templier réponse:
Modèle de composant:
*ngFor="#todo of todos | sort"
Code de composant:
@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;
}
}
Je suis en train de trier un tableau de Todo
s, commandé par la propriété completed
. Première todo.completed = false
et puis le todo.complete = true
.
Je ne comprends pas très bien la transform
méthode et comment passer des arguments dans la méthode et dans le sort
méthode.
Quel est le args: string
argument? Quelles sont a
et b
et d'où viennent-ils?
- J'ai trouvé ce module package pour OrderBy dans Angular5+ versions freakyjolly.com/...
Vous devez vous connecter pour publier un commentaire.
Veuillez voir https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe pour la pleine discussion. Cette citation est la plus pertinente.
En gros, pour les grandes applications qui doivent être minimisé de façon agressive de tri et de filtrage logique doit se déplacer vers le composant lui-même.
filteredHeroes
etsortedHeroes
, je pense que l'idée est que lors de l'initialisation du composant que vous feriez exécuter certains de tri/filtrage logique (peut-être que l'appel d'une méthode de ngOnInit), alors la configuration de la propriété avec les trier/résultats filtrés, et seulement de ré-exécution de la logique / mise à jour de la propriété si il y a quelque chose qui déclenche un besoin (par exemple, l'interaction de l'utilisateur déclenche appel AJAX pour obtenir plus de héros, ou l'utilisateur clique sur une case à cocher pour filtrer la moitié de l'écart en fonction de certains critères, etc.)J'ai modifié @Thierry Templier de réponse, de sorte que le tuyau peut trier des objets personnalisés dans angulaire 4:
Et de l'utiliser:
J'espère que cela aide quelqu'un.
The pipe 'sort' could not be found
. Je peux en quelque sorte injecter pipe dans mon composant comme dans angulaire 2 tuyaux : [ArraySortPipe]?Vous pourriez mettre en œuvre une coutume pipe pour ce qui tire parti de la
sort
méthode des tableaux:Et d'utiliser ensuite cette pipe comme décrit ci-dessous. N'oubliez pas de spécifier votre tuyau dans le
pipes
attribut du composant:C'est un simple exemple pour les tableaux avec les valeurs de chaîne, mais vous pouvez avoir quelques avancées de tri de traitement (basé sur les attributs de l'objet dans le cas d'un objet array, basé sur le tri des paramètres, ...).
Ici est un plunkr pour cela: https://plnkr.co/edit/WbzqDDOqN1oAhvqMkQRQ?p=preview.
Espère que cela vous aide,
Thierry
sort
est une méthode de JavaScriptArray
objet. Voir ce lien: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/....import {ArraySortPipe} from './pipe-comoponent';
par exemple.arrays
paramètre est-ce que vous avez en entrée (votre liste par exemple) etargs
correspond au paramètre de la pipe (avecsort:someObj
->args
=someObj
)'completed'
à latransform
méthode de votre tuyau 😉pipes: [..]
déclaration n'est plus valable (et n'est plus nécessaire)Mis à jour OrderByPipe: fixe pas de tri de chaînes.
créer un OrderByPipe classe:
dans votre contrôleur:
ou dans votre
dans votre code html:
Angulaire ne vient pas avec un orderBy filtre hors de la boîte, mais si nous décidons nous avons besoin, nous pouvons facilement faire un. Il y a cependant quelques mises en garde, nous avons besoin d'être conscient de la faire avec la vitesse et la minification. Voir ci-dessous.
Un simple tuyau ressemblerait à quelque chose comme ça.
Cette pipe accepte une fonction de tri (
fn
), et lui donne une valeur par défaut qui permet de trier un tableau de primitives d'une manière sensible. Nous avons la possibilité de substitution de cette fonction de tri si nous le souhaitons.Il n'accepte pas un nom d'attribut comme une chaîne de caractères, parce que les noms d'attributs sont soumis à la minification. Ils vont changer lorsque nous rapetisser notre code, mais minifiers ne sont pas assez intelligents aussi de rapetisser la valeur dans la chaîne de modèle.
Tri primitives (les nombres et les chaînes de caractères)
Que nous pourrions utiliser pour trier un tableau de nombres ou de chaînes de caractères à l'aide de la valeur par défaut de comparaison:
Tri d'un tableau d'objets
Si nous voulons trier un tableau d'objets, nous pouvons lui donner un comparateur de fonction.
Mises en garde - pure vs impur tuyaux
Angulaire 2 a une notion de pur et de l'impur tuyaux.
Une pure pipe optimise la détection de changement à l'aide de l'identité de l'objet. Cela signifie que le tuyau sera exécuté uniquement si l'entrée de l'objet de changements d'identité, par exemple, si nous ajoutons un nouvel élément dans le tableau. Il ne sera pas la descente dans les objets. Cela signifie que si nous changeons d'un ensemble d'attribut:
this.cats[2].name = "Fluffy"
par exemple, le tuyau ne sera pas relancé. Cela permet Angulaire d'être rapide. Angulaire tuyaux sont de la pure par défaut.Un impur pipe d'autre part de vérifier les attributs de l'objet. Ce qui le rend beaucoup plus lent. Car il ne peut pas garantir que le tuyau de la fonction le fera (peut-être qu'il sortd différemment selon le moment de la journée par exemple), un mauvais tuyau d'exécuter à chaque fois qu'un événement asynchrone se produit. Cela va ralentir votre application considérablement si le tableau est grand.
La conduite ci-dessus est pur. Cela signifie qu'il ne fonctionne que lorsque les objets dans le tableau sont immuables. Si vous modifiez un chat, vous devez remplacer l'ensemble de la cat objet avec un nouveau.
Nous pouvons changer le ci-dessus pour un impur pipe par la définition de la pure attribut:
Cette pipe descendra dans les objets, mais sera plus lent. À utiliser avec prudence.
J'ai créé un OrderBy pipe qui fait exactement ce dont vous avez besoin. Il prend en charge la possibilité de trier sur plusieurs colonnes d'une énumération d'objets ainsi.
Ce tuyau permet d'ajouter plus d'éléments dans le tableau après le rendu de la page et trier le tableau avec les mises à jour de façon dynamique.
J'ai un écrire sur le processus ici.
Et voici un travail de démonstration: http://fuelinteractive.github.io/fuel-ui/#/pipe/orderby et https://plnkr.co/edit/DHLVc0?p=info
Recommander u utilisation lodash angulaire, alors votre tuyau sera pour la prochaine fois:
et de l'utiliser dans le code html comme
et n'oubliez pas d'ajouter Tuyau à votre module
Cela fonctionne pour tous les champs que vous transmettez. (IMPORTANT: Il sera seulement l'ordre alphabétique, donc si vous passez un jour il va le commander comme alphabet pas que de la date)
@Component
n'a paspipes
de la propriété.C'est bon remplacement pour AngularJs orderby pipe dans angulaire 4. Facile et simple à utiliser.
C'est github URL pour plus d'informations
https://github.com/VadimDez/ngx-order-pipe
Comme nous le savons filtre et ordre par sont supprimés à partir ANGULAIRE 2 et nous devons écrire notre propre, voici un bon exemple sur plunker et article détaillé
Il a utilisé le filtre ainsi que orderby, voici le code à la commande pipe
Vous pouvez l'utiliser pour des objets:
Dans le paquet.json, ajouter quelque chose comme (Cette version est ok Angulaire 2):
Dans votre tapuscrit module (et des importations de tableau):
Dans la version actuelle de Angular2, et orderBy ArraySort les tuyaux ne sont pas pris en charge. Vous avez besoin d'écrire/utiliser quelques tuyaux pour cela.
Angulaire 5+ Version nous pouvons utiliser ngx-ordonnance-pipe paquet
Source Tutoriel Lien
Installer le paquet
Import dans les applications module
utiliser n'importe où