IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

SearchPipe - Comment chercher plusieurs éléments


Sujet :

Angular

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 7
    Points
    7
    Par défaut SearchPipe - Comment chercher plusieurs éléments
    Bonjour

    Désolée si le titre n'est pas très clair, je ne savais pas trop comment formuler ma question.
    J'essai de faire une barre de recherche pour un tableau qui liste des patients. J'ai réussis à adapter le bout de code si dessous à mes besoins mais lorsque je veux rechercher quelque chose, ça marche uniquement pour le "firstname", comment est-ce que je pourrais faire en sorte que je puisse également rechercher par "lastname" et "medecinTraitant" ?

    Aussi, si je tape "e" dans cette même barre, il ne va pas me trouver les noms qui commencent par un "e" mais tout les noms qui contiennent un "e", comment faire pour régler ce problème ?

    Je vous remercie d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import { Pipe, PipeTransform } from '@angular/core';
     
    @Pipe({
      name: 'filterPipe'
    })
     
     
    export class SearchPipe implements PipeTransform {
     
      transform(items: any[], searchToken: string) {
     
     
        if (searchToken == null) {
          searchToken = '';
        }
     
     
        searchToken = searchToken.toLowerCase();
     
        return items.filter(elem => elem.firstname.toLowerCase().indexOf(searchToken) > -1);
      }
     
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    import { Pipe, PipeTransform } from '@angular/core';
     
    @Pipe({
      name: 'filterPipe'
    })
     
     
    export class SearchPipe implements PipeTransform {
     
      transform(items: any[], searchToken: string) {
     
     
        if (searchToken == null) {
          searchToken = '';
        }
     
     
        searchToken = searchToken.toLowerCase();
     
        return items.filter(elem => {
     
          const firstname = this.findStr(elem.firstname, searchToken);
          if (firstname) {
               return elem;
          } else {
                   const lastname = this.findStr(elem.lastname, searchToken);
                   if (lastname ) {
                      return elem;
                   }
          }
     
        });
      }
     
       findStr(str, searchToken) {
           const index = str.toLowerCase().indexOf(searchToken);
     
          if (index == 0) {             // je ne me souviens plus, je suppose que 0 est l'indice du 1er element
     
            return true;
          } 
     
          return false;
       }
     
       hasLastname(elem, searchToken) {
         ...
         ...
       }
     
    }

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ou avec startsWith() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    searchToken = searchToken.toLowerCase();
    return items.filter((el) => el.firstname.toLowerCase().startsWith(searchToken));

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    pas mal avec startwith
    mais après comment tu fais pour chercher sur firstname et lastname ?

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Citation Envoyé par VdrOlivier
    comment est-ce que je pourrais faire en sorte que je puisse également rechercher par "lastname" et "medecinTraitant"
    Pour moi cela signifie que l'on cherche l'un ou l'autre, mais pas dans les deux champs en même temps.

    Si l'on veut rendre la fonction plus souple, dans ce cas on pourrait passer en paramètre le champ pour lequel il faut effectuer la recherche.

    En « vanilla », quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function findElements(datas, searchToken = "", field = "") {
      searchToken = searchToken.toLowerCase();
      return datas.filter((el) => el[field]?.toLowerCase().startsWith(searchToken));
    }
    On pourrait également faire, une « multi-recherche » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function findElements(datas, searchToken = "", ...fields) {
      searchToken = searchToken.toLowerCase();
      let ret = datas;
      fields.forEach((field) => {
        ret = ret.filter((el) => el[field]?.toLowerCase().startsWith(searchToken));
      });
      return ret;
    }
    mais j'ai plus de mal à voir l'intérêt sauf à passer également plusieurs searchToken !

    A VdrOlivier de préciser !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour !

    Tout d'abord je tenais à vous remercier d'avoir pris le temps de me répondre ! Dans un deuxième temps je tenais à m'excuser pour ma réponse tardive, je n'ai pas souvent le PC sous la main...

    J'essai encore de comprendre ce que vous m'avez suggéré de faire, je suis encore tout jeune dans le développement alors je suis un peu long à la détente. J'ai déjà pu tester la solution à Krakatoa et ça semble fonctionner du tonnaire (je te remercie encore une fois pour ça). Je vais à présent tester celle qui a été proposé par NoSmoking, je vous dirais la quelle des propositions correspond le mieux à ce qui m'avait été demandé !

    Bonne journée en attendant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSD] Comment gérer plusieurs éléments du même nom ?
    Par AnnSo1109 dans le forum Valider
    Réponses: 3
    Dernier message: 28/10/2009, 16h01
  2. Réponses: 4
    Dernier message: 19/08/2009, 22h58
  3. [OpenOffice][Tableur] Comment chercher un texte dans plusieurs documents ?
    Par gifffftane dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 08/10/2008, 15h29
  4. [JComboBox] Comment selectionner plusieurs éléments ?
    Par Bella la vita dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2008, 14h57
  5. Réponses: 1
    Dernier message: 23/04/2008, 00h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo