web-dev-qa-db-fra.com

Angular 6 upgrade: debounceTime n'est pas la propriété de Subject

J'essaie de mettre à niveau mon application de Angular 5 à Angular 6. J'ai suivi les étapes sur le https: //update.angular. io / Au moins je pense que je l'ai fait.

L'erreur est:

Property 'debounceTime' does not exist on type 'Subject<string>'.

Mes composants ont également perdu l'importation debounceTime. Je pense que la mise à jour ng l'a supprimé.

11
Logan_B

Je l'ai résolu avec l'aide de @ Siva636 et @Andrew Lobban.

J'avais besoin d'utiliser un tuyau:

  this.field$.pipe(
      debounceTime(400),
      distinctUntilChanged())
16
Logan_B

À partir de Angular 6.1.8, il suffit d'importer et d'ajouter un tube comme dans l'exemple ci-dessous

import {debounceTime} from 'rxjs/operators';

Puis sur le terrain juste avant le canal d'appel de la méthode d'abonnement observable (debounceTime (1000)) comme ci-dessous:

emailControl.valueChanges.pipe(debounceTime(1000)).subscribe(value => this.setMessage(emailControl));

Et c'est tout, c'est juste une réponse mise à jour de la réponse de @ tiago - où elle définit const debouncetime - nous n'avons pas vraiment besoin d'utiliser const et pipe.

6
Heena Manglani

Après la documentation de reactivex, vous devez également vous abonner au tube observable:

.pipe(
    debounceTime(500),
    distinctUntilChanged(),
    map((val) => {
        ...
    })
)
.subscribe();

n observable est appelé un observable "froid" s'il ne commence pas à émettre des éléments tant qu'un observateur n'y a pas souscrit.

5
jmuhire

je suis désolé pour le retard, mais je reçois ce problème aujourd'hui et résolu comme ça. je résous ce problème comme ceci: première importation comme ceci:

import {debounceTime} from 'rxjs/operators';
import {pipe} from 'rxjs'

Ensuite, créez un const comme celui-ci (j'ai essayé de le faire directement sans dupliquer le tuyau, mais cela n'a pas fonctionné, j'ai donc trouvé cette solution):

const debouncetime = pipe(debounceTime(1000));

Et puis utilisez-le avant de vous abonner, par exemple, je faisais un validateur de messagerie avec des messages:

const emailControl = this.registerForm.get('email');
    emailControl.valueChanges
     .pipe(debouncetime)
     .subscribe(value => this.setEmailMessage(emailControl))

je ne sais pas si ce sont les meilleures solutions mais cela fonctionne parfaitement. J'espère que ça aide quelqu'un!

0
Tiago Neiva