distinctUntilChanged 设置初始值

distinctUntilChanged set initial value

对于rxjs,我可以在使用distinctUntilChanged时提供一个初始值吗?当没有收到以前的值时,似乎完全跳过了 equals 检查。当它收到的第一个值是初始值时,我不想发出任何东西。


用例

在我的例子中,我正在使用 angular,我正在使用响应式表单并订阅其值更改。因为它是一个输入字段,所以我有一个典型的管道设置:

当用户将初始字段从空更改为某个内容然后在去抖动时间内再次为空时,事件无论如何都会被触发,这是不应该发生的。


我试过的

您可以使用 skip to skip the first emit or skipWhile 只跳过初始值。

obs.pipe(
  debounceTime(350),
  distinctUntilChanged(),
  skipWhile(value => value === initialValue) // or skip(1)
) 

你可以试试startWith:

const valueChanges$ = this.form
  .get('CONTROL_NAME')
  .valueChanges
  .pipe(
    startWith('INITIAL_VALUE'),
    distinctUntilChanged(),
    skip(1)
  )
  .subscribe((value: string) => { ... });

使用 startWithskipWhile 运算符不起作用,正如评论所证实的那样。

我简单地使用 skip(1):

解决了
const valueChanges$ = this.form
  .get('CONTROL_NAME')
  .valueChanges
  .pipe(
    skip(1)
    distinctUntilChanged(),
  )
  .subscribe((value: string) => { ... });