2017-02-25 13 views
0

我正在以下組件:陣環帶FirebaseObservable

import {BudgetItem} from "../models/budget.model"; 
import {Injectable} from "@angular/core"; 
import {FirebaseListObservable, AngularFire, FirebaseObjectObservable} from "angularfire2"; 

@Injectable() 
export class BudgetService{ 

    public ausgaben:number; 
    public einnahmen:number; 
    public budgetArray = []; 

    private budget:FirebaseListObservable<any>; 
    private budgetItemToUpdate; 

    constructor(private af:AngularFire){ 
    this.budget = af.database.list('/Budget'); 
    this.ausgaben = this.getAusgaben(); 
    this.einnahmen = this.getEinnahmen(); 

    this.budget.subscribe(items => { 
     // items is an array 
     items.forEach(item => { 
      this.budgetArray.push(new BudgetItem(item.zweck,item.betrag,item.ausgabe)); 
     }); 
    }); 
    } 

    //Nimmt ein BugetItem als Parameter und fügt dieses der Datenbank als neuen Datensatz bei 
    addToBuget(item:BudgetItem){ 
    this.budget.push({zweck:item.zweck,betrag:item.betrag,ausgabe:item.ausgabe}); 
    } 

    //Nimmt den Key eines Objekts und löscht das jewelige Objekt aus der Datenbank 
    removeFromInventar(key:string){ 
    this.budget.remove(key); 
    } 

    //Synchronisiert ein bestehendes Objekt mit der Datenbank 
    updateBudgetItem(item){ 
    this.budgetItemToUpdate = this.af.database.object("Budget/" + item.$key) 
    this.budgetItemToUpdate.update({zweck:item.zweck,betrag:item.betrag,ausgabe:item.ausgabe}); 
    } 

    //berechnet die totalen Einnahmen. Als Anfangswert wird 2500(Budget) gesetzt. 
    getEinnahmen(){ 

    this.einnahmen = 2500; 

    console.log(this.budgetArray); 

    for(let item of this.budgetArray){ 
     if(item.ausgabe === "Einnahme"){ 
     this.einnahmen = this.einnahmen + item.betrag; 
     } 
    } 
    console.log(this.einnahmen); 
    return this.einnahmen; 
    } 




    //berechnet die totalen Ausgaben. Als Anfangswert wird 0 gesetzt. 
    getAusgaben(){ 

    this.ausgaben = 0; 

    console.log(this.budgetArray); 

    for(let item of (this.budgetArray)){ 
     if(item.ausgabe === "Ausgabe"){ 
     this.ausgaben = this.ausgaben + item.betrag; 
     } 
    } 

    console.log("Ausgaben: " + this.ausgaben) 
    return this.ausgaben; 
    } 

} 

我可以suggestfully推陣在我的項目,但我想補充了itempropertiy「Betrag」的idividual對象和顯示他們的總和。

我的錯誤在哪裏,或者你有什麼樣的建議讓代碼工作?

+0

我不知道我理解你的問題。 *從概念上說*你有一個異步的對象列表,帶有'betrag'屬性,並且你想要加上所有的'betrag'屬性? – AngularChef

+0

這是正確的,但我有一個問題與實施的添加部分。 –

回答

0

下面是它的要點:

af.database.list('/Budget') 
    // Reduce all the items to a single value. 
    .map(items => items.reduce((acc, item) => acc + item.betrag, 0)) 
    // Log the total 
    .do(total => console.log(total)); 

希望你可以將此代碼適應你的情況。讓我知道你是否需要幫助。

0
getEinnahmen(){ 

    this.einnahmen = 0 

    this.af.database.list("/Budget",{query:{ 
    orderByChild:'ausgabe', 
    equalTo:'Einnahme' 
    }}).map(items => items.reduce((acc, item) => acc + item.betrag, 0)) 
    // Log the total 
    .subscribe(total => {console.log(total);this.einnahmen = total;}); 

    return this.einnahmen+2500; 

    } 

我用reduce方法改變了代碼。現在我可以將總數記錄到控制檯,但是現在我想將其添加爲方法getEinnahmen的返回值。