Angular 6升级:debounceTime不是Subject

时间:2018-05-05 15:53:39

标签: angular typescript rxjs

我正在尝试将我的应用从Angular 5升级到Angular 6.我按照https://update.angular.io/上的步骤操作 至少我想我做到了。

错误是:

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

我的组件也丢失了debounceTime导入。我认为ng更新删除了它。

4 个答案:

答案 0 :(得分:13)

我在@ Siva636和@Andrew Lobban的帮助下解决了这个问题。

我需要使用管道:

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

答案 1 :(得分:5)

在reactx文档之后,您还应该订阅可观察的管道:

.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.

答案 2 :(得分:2)

从Angular 6.1.8开始,只需像下面的示例一样导入和添加管道

import {debounceTime} from 'rxjs/operators';

然后在可观察的订阅方法调用管道(debounceTime(1000))之前的on字段,如下所示:

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

就是这样,这只是@tiago答案的更新答案-她在其中定义const debouncetime-我们真的不需要使用const和pipe。

答案 3 :(得分:0)

对不起,我很抱歉,但是今天我才遇到这个问题,并已解决。 我这样解决这个问题: 像这样第一次导入:

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

然后创建一个这样的const(我试图直接做而不复制管道,但是没有用,所以我找到了这个解决方案):

const debouncetime = pipe(debounceTime(1000));

然后使用它,然后再进行订阅,例如,我正在做一个带有消息的电子邮件验证程序:

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

不知道它是否是最好的解决方案,但它可以完美运行。 希望对您有所帮助!