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
});
当然你也可以反其道而行之,监听你需要的特定字段。
我有一个大表格,想监听 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
});
当然你也可以反其道而行之,监听你需要的特定字段。