1
votes

Tri des données en angulaire 7

J'ai besoin de trier les libellés en angle. Je le fais à partir du fichier component.ts. Le tri fonctionne très bien. Il attribue la valeur clé de l'étiquette pour le tri. Mais mon application est en deux langues. donc le trier à l'aide de la clé ne fonctionne pas lorsque je passe à une autre langue. Y a-t-il un moyen de le trier dans n'importe quelle langue

getlabel(Id: string): Observable<Dto[]> {
return this.httpClient
  .get(
    url
  )
  .pipe(
    map((data: any) => {
      data.sort((a, b) => {
        return a.label > b.label ? 1 : -1
      })
      return data
    })

  ) as Observable
}


1 commentaires

Veuillez envisager de fournir un exemple minimal reproductible si possible. De cette façon, il est plus probable que les bénévoles de SO peuvent vous aider.


3 Réponses :


2
votes

Utilisez la fonction localeCompare :

.pipe(
    map((data: any) => {
      return data.sort((a, b) => {
        return a.label.localeCompare(b.label, 'he');
      })
    })
  ) as Observable

'he' est pour la langue hébraïque, remplacez-le par code de langue

DEMO Stackblitz


11 commentaires

C'est la langue hébraïque


j'ai deux langues en et fr


Savez-vous quelle est la langue d'affichage actuelle à chaque fois? vous écrivez "quand je passe à une autre langue", lorsque vous changez de langue, enregistrez-la dans une variable locale et passez-la à localeCompare func


ok j'ai compris comment utiliser la comparaison locale pour trier dans les deux langues, mais le tri ne change pas tant que je ne recharge pas la page. Supposons que son anglais, il trie et puis quand je clique sur français, il reste avec le tri anglais jusqu'à ce que je recharge la page


Je pense que je dois utiliser onLanguagechange mais puis-je l'utiliser en service


Il s'agit d'un bogue dans votre code, je mettrai à jour la réponse pour le corriger pour vous


Et? toujours pas de changement dans la liste triée?


ne trie pas à moins d'être actualisé après le changement de langue


Ceci est dû au fait que vous n'exécutez pas cet événement observable sur l'événement «changer de langue». lorsque vous changez de langue, appelez cette fonction pour trier la liste avec le nouveau code de langue.


Je vais créer une démo simple pour vous montrer. Comment faire "quand je passe à une autre langue", est-ce avec une balise select ?


continuons cette discussion dans le chat .



0
votes

Cela fonctionne pour le tri dans différentes langues

.pipe(
    map((data: any) => {
      data.sort((a, b) => {
        return this.translate
          .instant(a.label)
          .localeCompare(this.translate.instant(b.label))
      })
      return data
    })
  ) as Observable


0 commentaires

0
votes

Passez la clé qui existe dans un tableau d'entrée.
function sortByKey(array: [], key: any, sortType = '') {
  if (!array.length) {
     return array;
  }

   return array.sort((a, b) => {
     if (sortType === 'desc') {
          if (b[key] < a[key]) { return -1; }
          if (b[key] > a[key]) { return 1; }
      } else {
          if (a[key] < b[key]) { return -1; }
          if (a[key] > b[key]) { return 1; }
      }

      return 0;
  });
}


0 commentaires