Angular 6升级:debounceTime不是Subject的属性。

15
我正在尝试将我的应用程序从Angular 5升级到Angular 6。我遵循了https://update.angular.io/上的步骤,至少我认为我已经这样做了。
错误是:
Property 'debounceTime' does not exist on type 'Subject<string>'.

此外,我的组件丢失了 debounceTime 的导入。我认为 ng update 将其移除了。


1
你是这样导入的吗:import {debounceTime} from 'rxjs/operators'? - siva636
是的。我添加了这个语句:import { map, takeUntil, tap, debounceTime } from 'rxjs/operators'; - Logan_B
1
另外,你是否使用了管道操作符而不是链式操作? - siva636
2
应该是这样的:this.field$.pipe(debounceTime(400)) - siva636
2
是的,RxJS在v6中正在摆脱点链接。@Logan_B看起来是正确的... - Andrew Lobban
显示剩余4条评论
4个回答

18

在 @Siva636 和 @Andrew Lobban 的帮助下,我解决了它。

我需要使用管道符号:

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

@Logan_B 我没有升级。我仍在使用旧版本。我不记得错误了。 - user4628051

10

从Angular 6.1.8开始,只需要像下面的例子一样导入和添加管道即可:

import {debounceTime} from 'rxjs/operators';

然后在observable的subscribe方法调用之前,就像下面这样使用pipe(debounceTime(1000)):

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

就是这样,这只是@tiago答案的更新版本——她定义了const debouncetime ——我们并不真正需要使用const和管道。


6

1
抱歉让您久等了,但我今天才遇到这个问题并解决了它。 我是这样解决这个问题的: 首先按照以下方式导入:
import {debounceTime} from 'rxjs/operators';
import {pipe} from 'rxjs'

然后创建一个常量,如下所示(我试图直接创建而不是复制管道,但不起作用,所以我找到了这个解决方案):
const debouncetime = pipe(debounceTime(1000));

然后在订阅之前使用它,例如我正在使用消息进行电子邮件验证:

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

不知道这是否是最好的解决方案,但它完美地运作。 我希望它能帮助到某个人!


不需要debouncetime变量,只需执行 .pipe(debounceTime(1000)) - Moulde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接