15

I am attempting to upgrade my app from Angular 5 to Angular 6. I followed the steps on the https://update.angular.io/ At least i think i did.

The Error is :

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

Also my components lost the debounceTime import. I think the ng update removed it.

Logan_B
  • 527
  • 1
  • 7
  • 22

4 Answers4

18

I solved it with the help of @Siva636 and @Andrew Lobban.

I needed to use pipe:

  this.field$.pipe(
      debounceTime(400),
      distinctUntilChanged())
Logan_B
  • 527
  • 1
  • 7
  • 22
  • @Logan_B I din't upgrade since. I still run the old version. I can't remember the error –  May 30 '18 at 04:49
10

As of Angular 6.1.8, just need to import and add pipe like below example

import {debounceTime} from 'rxjs/operators';

Then on field just before the observable subscribe method call pipe(debounceTime(1000)) like below:

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

And that's it, it's just a updated answers of @tiago's answer - where she is defining const debouncetime - we don't really need to use const and pipe.

Heena Manglani
  • 356
  • 2
  • 11
6

Following the reactivex docs, you should also subscribe to the pipe observable :

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

An Observable is called a “cold” Observable if it does not begin to emit items until an observer has subscribed to it.

jmuhire
  • 2,091
  • 21
  • 19
1

i am sorry for the delay but i just get this problem today and fixed like this. i solve this issue like this: first import like this:

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

Then create a const like this (i tried to do directly without duplicating pipe but didn´t work so i found this solution):

const debouncetime = pipe(debounceTime(1000));

And then use it before you subscribe for example i was doing an email validator with messages:

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

dont know if its the best solutions but it works perfectly. I hope it helps some one!

Tiago Neiva
  • 337
  • 1
  • 6