Angular 从被动表单值更改中删除空对象值

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

在角度应用中,我有反应形式。我订阅了它 valueChanges在得到subscribe方法的结果之前,想用rxjsfilter或一些类似的方法过滤这个对象,只得到表单的非空feald。我怎样才能解决这个问题

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]);”如果您的值可以为空、空或未定义