J'ai donc un champ d'entrée typeahead qui ressemble à ceci:NGX-bootstrap typeahead observable
<input formControlName="segment"
[typeahead]="segments"
(typeaheadLoading)="segmentsLoading($event)"
(typeaheadNoResults)="segmentsNoResults($event)"
(typeaheadOnSelect)="segmentOnSelect($event)"
typeaheadOptionsLimit="10"
typeaheadMinLength="3"
typeaheadWaitMs="300"
[typeaheadItemTemplate]="customSegmentTemplate"
class="form-control">
Et un Observable qui me aide les suggestions typeahead.
this.segments = Observable.create((observer: any) => observer.next(this.segments))
.mergeMap((number: string) => this.suggestionsService.getSegmentSuggestions(this.editForm.get('segment').value);
Mon problème est que le Observable envoie une demande, même quand mon entrée longueur de la valeur du champ est inférieure à 3, même si je l'ai mis typeaheadMinLength="3"
. Cela se produit lorsque l'utilisateur saisit une valeur, puis supprime rapidement certains caractères (plus rapidement que mon temps d'anti-rebond), puis essaie d'entrer une nouvelle valeur. Mon API pour les suggestions échoue quand il reçoit une valeur d'entrée avec une longueur inférieure à 3, puis mon application se casse et je dois actualiser la page pour la faire fonctionner à nouveau. J'ai essayé d'établir le temps de debounce à 0 et je n'ai pas eu ce problème alors, mais c'est une mauvaise pratique et il envoie trop de demandes à mon API. Des idées sur la façon de résoudre cela?
I ajouté bloc catch comme celui-ci 'this.segments = Observable.create ((observateur: any) => observer.next (this.segments)) .mergeMap ((numéro: string) => this.suggestionsService. getSegmentSuggestions (this.editForm.get (valeur 'segment').)) .catch ((erreur: any) => { retour []; }) ' Cela a résolu mon problème pour l'instant, mais je suis sûr il y a une meilleure solution que celle-ci. – banana
J'ai exactement le même problème, avez-vous déjà compris? – Simon
@Simon Je l'ai résolu comme dans le commentaire ci-dessus, et il travaille au moins jusqu'à ce que je trouve une solution plus élégante. Mais une solution plus élégante est encore à trouver. – banana