2017-04-22 6 views
0

私はいくつかの非欄を持つフォームを持っています。問題は、すべてのフィールドにデータが含まれていない限り、ファイアベースへの書き込みが「未定義フィールド」エラーで失敗し、何も書き込まれないということです。 firebase.service.tsのAngular 2+フォームから提出された未定義フィールドを除外する方法

追加-product.tsを

export class AddproductComponent implements OnInit { 
    adjWaist:any; 
    brand:any; 
    buyAud:any; 
    buyQty:any; 
    collection:any; 
    . 
    . 
    . 

のパートパート:

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"で失敗します。他のWebページに必須ではないフィールドがあるので、簡単な修正が必要ですが、多くの重要な言葉をびっくりしたが、成功しなかった。私はデータベースに "空の"不要な行を設定したくありません。

私はangle-cli、angular 4とAngularFireを使用しています。

答えて

0

私はFirebaseに直接慣れていませんが、あなたが説明しているコンセプトは、を使って解決できるようです。

基本的にObject.assignは、1つのオブジェクトのプロパティが別のオブジェクトのプロパティにコピーされるオブジェクトを結合することができます。つまり、一致するものをオーバーライドし、一致しないプロパティには触れません。

ので、例えばのため:だから

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:any = {x:10、y:20 z:}; デフォルトはany = {x:0、y:0、z:0}とします。 let =オブジェクト。割り当て(デフォルト、1)。 // combinedは{x:10、y:20、z:0}です。 –

+0

応答ありがとうございますが、私があなたのコードを理解すれば、それは私が必要とするものの反対です。 let:any = {x:10、y:20 z:}; \t \tデフォルトはany = {x:0、y:0、z:0}とします。 \t \t let =オブジェクト。割り当て(デフォルト、1)。 \t \t // combinedは{x:10、y:20、z:0}です。 –

+0

申し訳ありませんが、入力欄に改行文字が何か分かりません。 :( –

関連する問題