如何排除从Angular 2+表单提交的未定义字段

时间:2017-04-22 03:53:43

标签: 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.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的所有字段

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

我正在使用angular-cli,angular 4和AngularFire。

1 个答案:

答案 0 :(得分:0)

我不直接熟悉Firebase,但您所描述的概念似乎可以使用Object.assign来解决。

基本上,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可接受的内容