Forms 如何排除从角度2+;形式

Forms 如何排除从角度2+;形式,forms,angular,firebase-realtime-database,Forms,Angular,Firebase Realtime Database,我有一个表单,它有一些非疯狂的字段。问题是,除非所有字段都包含数据,否则写入firebase会失败,并出现“未定义字段”错误,并且不会写入任何内容 add-product.ts的一部分 export class AddproductComponent implements OnInit { adjWaist:any; brand:any; buyAud:any; buyQty:any; collection:any; . . .

我有一个表单,它有一些非疯狂的字段。问题是,除非所有字段都包含数据,否则写入firebase会失败,并出现“未定义字段”错误,并且不会写入任何内容

add-product.ts的一部分

export class AddproductComponent implements OnInit {
    adjWaist:any; 
    brand:any;
    buyAud:any;
    buyQty:any;
    collection:any;
    .
    .
    .
firebase.service.ts的一部分:

addProduct(product){  
    //create root ref
    let storageRef = firebase.storage().ref();
    let propRef = this.products.push(product);
}

interface Product{
    $key?:string;
    adjWaist?:any;   
    brand?:string;
    buyAud?:number;
    buyQty?:number;
    collection?:string;
    .
    .
    .
}
如果我填充它写入firebase的所有字段

如果有“未定义”字段,它会失败,例如:“AdjHeild”和“undefined”,这是可以的,因为它不是一个强制性字段,我相信其他网页也有非强制性字段,因此必须有一个简单的修复,但我谷歌搜索了许多关键字,但没有成功。我不想用“空的”不需要的行填充数据库


我使用的是angular cli、angular 4和AngularFire。

我对Firebase不太熟悉,但您所描述的概念似乎可以使用
对象。分配
解决

基本上,
Object.assign
允许您组合对象,其中一个对象的属性被复制到另一个对象的属性上-覆盖任何匹配的属性,而不触及那些不匹配的属性

因此,例如:

 let one: any = { x: 'first', y: 'second' };
 let default: any = { x: 'unknown', y: 'unknown', z: 'unknown' };
 let combined = Object.assign(default, one);
 // combined is now: { x: 'first', y: 'second', z: 'unknown' };

因此,您可以通过创建一个将所有必需属性设置为合理默认值(例如空字符串或0)的默认产品来利用此功能。然后,在保存到firebase之前,使用
Object.assign
将要保存的产品的属性复制到该默认产品上,以便您仍然拥有有效的产品,但是它的所有字段都设置为Firebase可以接受的值。

感谢您的响应,但如果我理解您的代码,它与我需要的正好相反。设1:any={x:10,y:20z:};设默认值:any={x:0,y:0,z:0};让combined=Object.assign(默认为一);//现在组合为:{x:10,y:20,z:0};感谢您的回复,但如果我理解您的代码,这与我需要的正好相反。设1:any={x:10,y:20z:};设默认值:any={x:0,y:0,z:0};让combined=Object.assign(默认为一);//现在组合为:{x:10,y:20,z:0};抱歉,输入框似乎不理解新行字符是什么:(