我的表格中有一些非疯狂的字段。问题是除非所有字段都包含数据,否则对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。
答案 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可接受的内容