Angular 从被动表单值更改中删除空对象值
在角度应用中,我有反应形式。我订阅了它 valueChanges在得到subscribe方法的结果之前,想用rxjsfilter或一些类似的方法过滤这个对象,只得到表单的非空feald。我怎样才能解决这个问题Angular 从被动表单值更改中删除空对象值,angular,rxjs,angular-reactive-forms,Angular,Rxjs,Angular Reactive Forms,在角度应用中,我有反应形式。我订阅了它 valueChanges在得到subscribe方法的结果之前,想用rxjsfilter或一些类似的方法过滤这个对象,只得到表单的非空feald。我怎样才能解决这个问题 this.form.valueChanges.pipe( debounceTime(500), filter(formObj => { // code that remove empty object values }) ).subscribe
this.form.valueChanges.pipe(
debounceTime(500),
filter(formObj => {
// code that remove empty object values
})
).subscribe(val => {
// val example `{fullName: "name", dateOfBirthday: "", phoneNumber: "", fullAddress: ""}`
});
已经创建了一个Stackblitz供您参考
您可以这样实现它:
filterEmptyFields(data: any): any { // Filter any fields that aren't empty & store in a new object - To be passed on the Pipe map's caller
let fields = {};
Object.keys(data).forEach(key => data[key] != '' ? fields[key] = data[key] : key);
return fields;
}
trackEmptyFields(): void {
this.form
.valueChanges
.pipe(map(this.filterEmptyFields))
.subscribe(fields => console.log(fields));
}
Stackblitz的输出
参考这一条可能会对您有所帮助:那么问题出在哪里?您可以使用
map()
代替filter()
并将formObj
更改为您需要的任何内容。或者您可以使用“Object.keys(data).forEach((key)=>(!data[key])&&delete data[key]);”如果您的值可以为空、空或未定义