Angular 2+:如何订阅白名单字段的表单valueChanges?

Angular 2+: how to subscribe to form valueChanges of whitelisted fields?

我有一个大表格,想监听 5 特定字段的变化.

我可以听完整个表格:

this.form.valueChanges.subscribe(data => {
    // do something, because any field changed
});

或单个字段:

this.form.get('my_single_field').valueChanges.subscribe(data => {
    // do something, because my_single_field changed
});

期望:

但我想要类似的东西:

this.form.get(['field1', 'field5']).valueChanges.subscribe(data => {
    // do something, because field1 or field5 changed
});

或:

this.form.valueChanges.subscribe(data, changedField => {
    // do something, because changedField changed
});

有什么想法吗?谢谢!

编辑:

您可以在表单上添加以下函数作为原型。

上一个:

使用 rxjs 中的 merge。功能应该是这样的。

function listenChangesOn(form,fields:string[]){
  return Observable.merge(fields.map(field=>form.get(field).valueChanges))
}

并且可以像

一样使用
listenChangesOn(form,['field1','field2']).subscribe(a=>..)

我遇到了类似的问题。我想听取除一个字段以外的整个表单,并通过像您一样听取整个表单来解决,并在观察者函数内放置一个条件询问是否触及该字段。会是这样的:

this.form.valueChanges.subscribe(data => {
   if (this.form.controls['field1'].touched) return;

// do something, because any other field changed
});

当然你也可以反其道而行之,监听你需要的特定字段。