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 :

mat-autocomplete et requête httpClient


Sujet :

Angular

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut mat-autocomplete et requête httpClient
    Bonsoir,
    je cherche a adapter l'exemple officiel d'Angular Material, qui se base sur un tableau d'objets statique, pour prendre pour source le retour d'un httpClient.

    Je pense être proche de la solution, mais ce n'est pas encore ça...

    Mon HTML ressemble a ca:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="pushValue()">
        <mat-option *ngFor="let option of filteredoptions | async" [value]="option">
          <span>{{option.label}}</span> |
          <small>{{option.id}}</small>
        </mat-option>
      </mat-autocomplete>

    Mon fichier TS a cela:
    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
    ...
    optionCtrl = new FormControl();
    filteredoptions: Observable<any[]>;
     
    constructor(private httpClient: HttpClient) {
     
       this.filteredoptions = this.optionCtrl.valueChanges
          .pipe(
            debounceTime(500),
            distinctUntilChanged(),
            tap(value => this.httpSearch(value)
            ),
            startWith(''),
            map(value => typeof value === 'string' ? value : value.label),
            map(option => this.httpClient.get(this.endpointURL + option).subscribe({next: value => {return value}}))
          );
     
    }
    ...
    J’essaie donc de retourner le résultat de la méthode httpclient.get la ou dans l'exemple, ils utilisent une fonction de filtrage du tableau d'objets.

    J'obtiens l'erreur suivante au niveau de ma variable this.filteredoptions
    Type 'Observable<Subscription>' is not assignable to type 'Observable<any[]>'.
    J'ai beau tourner le problème dans tous les sens, je ne vois pas comment lui passer le résultat d'HttpCLient qui pourtant, correspond bien à un tableau d'objet quand la chaîne n'est pas vide...

    Qu'est ce que je manque

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Par défaut
    la requete dans le map c'est un peu bizarre




    sur google tape: angular autocompletion with http
    tu trouveras pleins d'exemples

    https://www.freakyjolly.com/angular-...erver-results/
    https://www.itsolutionstuff.com/post...leexample.html

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    Merci pour ton aide, j'avais vu ces exemples avec d'autres egalement mais cela n'a pas pu m'aider.
    En tordant dans tous les sens j'ai fini par trouver hier soir le code qui fonctionne pour moi, je trouve dommage que la doc officielle ne propose pas d'exemple.

    Voici le code si cela peut servir à d'autres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    this.filteredoptions = this.optionCtrl.valueChanges
          .pipe(
            debounceTime(500),
            distinctUntilChanged(),
            startWith(''),
            switchMap(value => value.length > 3? this.httpClient.get(this.endpointURL + value) : [])
          )
    Dans ce code, je retourne soit le resutat de la requete httpclient.get, soit un tableau vide. Et le <mat-option *ngFor="let option of filteredoptions | async" [value]="option"> est content avec cela.

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Par défaut
    bien jouez !

    la difference entre map et switchMap :

    tu avais utilisé map mais faut savoir qu'on utilise map pour faire quelque chose de synchrone (des calculs)
    switchMap on l'utilise quand on doit faire quelque chose de asynchrone (comme une requête http)

    voilà en gros l'explication !

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    Merci beaucoup pour l'explication, j'avoue que parfois j'y vais souvent a tâtons...

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

Discussions similaires

  1. angular mat-autocomplete mat-option
    Par totot dans le forum Angular
    Réponses: 0
    Dernier message: 11/08/2019, 18h07
  2. [Débutant] Utiliser Autocomplete avec une requete SQL (à la place d'un WebService)
    Par sak_ura dans le forum ASP.NET
    Réponses: 5
    Dernier message: 25/03/2013, 16h32
  3. [MySQL] requet pour formulaire autocompletion et liste liée
    Par serna dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/11/2010, 18h04
  4. recuperation requete mysql pour autocompletion js
    Par fasyr dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/04/2009, 17h17
  5. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15

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