2016-11-24 2 views
0

Ich möchte den Gesamtbetrag des Warenkorbes berechnen. Ich habe ShoppingCartItem und Produkt Tabellen. Ich habe unten CodeAngular2 nested observable cart total aber Wert zurück undefined

cartTotals(qty = 0, total = 0) { 
return this.af.database.list('ShoppingCartItem') 
    .map(carts => { 
    carts.map(cart => { 
     this.af.database.object(`Product/${cart.productId}`) 
     .subscribe(d => { 
      cart.product = d; 
     }); 
     return cart; 
    }); 
    carts.forEach(cartItem => { 
     qty += cartItem.quantity; 
     total += cartItem.quantity * cartItem.product.price; 
     // console.log(cartItem); 
    }); 
    return {qty, total}; 
    }); 
} 

Rückkehr Menge Wert funktioniert, aber Gesamt Wert

undefined Zurückkehren

Diese Plunker

+0

'total' kann nicht sein' undefined' weil seine Standardwert ist die Nummer 0 –

+0

cartItem.product.price undefined zurück, weil Gesamtwert Rückkehr undefiniert oder Fehler –

+0

Mögliche Duplikat von [I die Summe der berechnenden ShoppingCart bei Firebase mit Angularfire2] (http://stackoverflow.com/questions/40833704/i-want-to-cal-the-sum-of-the-shoppingcart-at-firebase-with-angularfire2) – STEEL

Antwort

0

Lassen Sie mich wissen, ob das funktioniert, da ich nicht die ganze Ihrer Quellcode und API-Daten.

cartTotals(qty = 0, total = 0) { 
    return this.af.database.list('ShoppingCartItem') 
    .map(carts => carts.map(cart => cart.product = this.findProductFromCartId(cart.productId))) 
    .map(carts => carts.map(cartItem => { 
     cartItem.qty = cartItem.quantity + qty; 
     cartItem.total = (cartItem.quantity * cartItem.product.price) + total; 
     return cartItem; 
    }); 
} 

findProductFromCartId(id) { 
    return this.af.database.object(`Product/${id}`) 
     .flatMap(product => Observable.combineLatest(product));//add this onlyIF its returned FirebaseObservable Object 
} 
+0

Einen solchen Fehler zurückgeben : Eigenschaft 'Menge' existiert nicht für den Typ 'Observable '. Genauere Beschreibung dieses Links [link] (http://stackoverflow.com/questions/40833704/i-want-to-calcu-the-sum-of-the-shoppingcart-at-firebase-with-angularfire2). Ich denke, Sie werden eine bessere Idee geben. Danke für dein Interesse. –

+0

um Ihnen als Erstes etwas über Ihren Code zu sagen, sind die Daten in Ihren API-Daten getrennt, was großartig ist. Aber die Frontend-Logik, um den Produktpreis zu bekommen, ist nicht gut. Können Sie bitte teilen Sie die Mock-Daten – STEEL

+0

dies [Plocker] (http://plnkr.co/edit/cWdXRGNk08NDtArDj10O?p=preview). Kannst du helfen? –