我在角度 2 中遇到了反应式表单的问题。我想创建我的对象以将其发送到我的 API,但我的 ReactiveForms 也没有生成必需的字段和表单组。
如果我通过 http post 请求直接发送我的对象,我有这个 JSON:
MyObject{
Name:"toto"
Surname:""
Address:{
City:"",
StreetName:""
}
}
但我希望这个 JSON 与 API 一致。(如果有空或 null 属性/对象,我会收到错误,因为字段存在但无效:
MyObject{
Name:"toto"
}
因为姓氏和地址是可选的。
我将 ReactiveForm 与 formBuilder 一起使用,但我不知道如何仅获取填充字段。
这就是我创建表单的方式:
myForm: FormGroup;
myUserModel : UserModel; // (Interface UserModel such as my form fields)
constructor(private fb : FormBuilder){}
createForm(){
this.myFrom = this.fb.FormGroup({
Name:['';Validators.requires],
Surname:'',
Address:this.fb.FormFroup({
City: '',
StreetName:''
})
})
}
onSubmit(){
this.myUserModel = this.myForm.value;
this.registerUserToAPI(this.myUserModel);
}
为了欺骗我使用它,但它太脏了......:
cleanObjectToSend(obj){
return this.removeEmptyObj(this.removeEmptyAttribute(obj));
}
removeEmptyAttribute = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') this.removeEmptyAttribute(obj[key]);
else if (obj[key] == null || obj[key] == '') delete obj[key];
});
return obj;
};
removeEmptyObj(obj){
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') {
if(Object.keys(obj[key]).length===0 && obj[key].constructor == Object){
delete obj[key];
return;
}
else this.removeEmptyObj(obj[key]);
}
else if (obj[key] == null || obj[key] == '') delete obj[key];
});
return obj;
}
它只允许我获取非空字段而不是空字段来生成我的 JSON。
如何在没有 null 或空值的情况下直接获得 JSON clean JSON?