【问题标题】:How to exclude undefined fields submited from an Angular 2+ form如何排除从 Angular 2+ 表单提交的未定义字段
【发布时间】:2017-04-22 15:21:56
【问题描述】:

我有一个包含一些非强制性字段的表单。问题是,除非所有字段都包含数据,否则写入 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”和“未定义”这没关系,因为它不是必填字段,我确信其他网页有非必填字段,所以必须有一个简单的修复,但我用谷歌搜索了很多关键词,但没有成功。我不想用“空”不需要的行填充数据库。

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

【问题讨论】:

    标签: forms angular firebase-realtime-database


    【解决方案1】:

    我不直接熟悉 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 可以接受的内容。

    【讨论】:

    • 感谢您的回复,但如果我理解您的代码,这与我需要的相反。 let one: any = { x: 10, y: 20 z: };让默认值:any = { x: 0, y: 0, z: 0 }; let combine = Object.assign(default, one); // 现在合并为:{ x: 10, y: 20, z: 0 };
    • 感谢您的回复,但如果我理解您的代码,这与我需要的相反。 let one: any = { x: 10, y: 20 z: };让默认值:any = { x: 0, y: 0, z: 0 }; let combine = Object.assign(default, one); // 现在合并为:{ x: 10, y: 20, z: 0 };
    • 对不起,输入框好像不明白什么是换行符。 :(
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2020-06-17
    • 2016-04-16
    • 2019-10-09
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多