我通过2个[formControl]“ toppings”:array和“ toppings2”:array收听2种表单。
我必须同时具有表单的2个值。所以我将我的两个观测值与“ CombineLatest”结合在一起
我的代码:
ngOnInit() {
combineLatest(this.toppings.valueChanges, this.toppings2.valueChanges)
.subscribe(val => console.log(val))
}
但是现在,在初始化组件时,只有一种形式发送console.log(val)。
如果我单击此表单,则在收到第二个表单的日志后。你遇到这个问题了吗?
答案 0 :(得分:11)
您可能希望两个Observable都有一个初始值。 combineLatest
仅在所有Observables都发出了至少一个值时才发出。使用startWith
运算符创建此行为,如下所示:
combineLatest(
this.toppings.valueChanges.pipe(startWith("")),
this.toppings2.valueChanges.pipe(startWith("")))
或者,如果您有可用的初始值,如建议的那样:
combineLatest(
this.toppings.valueChanges.pipe(startWith(this.toppings.value)),
this.toppings2.valueChanges.pipe(startWith(this.toppings2.value)))
注意,它将以初始值发出一次。要抑制此行为,可以使用skip(1)
运算符忽略此初始通知。