2017-04-22 88 views
0

我有一个非疯狂字段的表单。问题是,除非所有字段都包含数据,否则写入firebase失败并出现“未定义字段”错误并且没有任何内容被写入。附加product.ts如何从Angular 2+表格中排除未定义的字段

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; 
    . 
    . 
    . 
} 

如果我填写的所有字段将其写入火力

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

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

回答

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可接受的内容。

+0

谢谢你的回应,但如果我了解你的代码,它是我需要的相反。 let one:any = {x:10,y:20 z:}; 设置默认值:any = {x:0,y:0,z:0}; let combined = Object.assign(default,one); //现在是:{x:10,y:20,z:0}; –

+0

谢谢你的回应,但如果我理解你的代码,它就是我所需要的。 let one:any = {x:10,y:20 z:}; \t \t设置默认值:any = {x:0,y:0,z:0}; \t \t let combined = Object.assign(default,one); \t \t //合并为:{x:10,y:20,z:0}; –

+0

对不起,但输入框似乎并不理解新的行字符是什么。 :( –

相关问题