2017-04-22 54 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

對不起,但輸入框似乎並不理解新的行字符是什麼。 :( –