2017-02-25 3 views
0

ich ein einfaches Projekt mache:Angular 2: leeres Array in der Komponente HTML

Es gibt zwei Eingangsschieberegler und eine Schaltfläche ‚Berechnen‘, wenn die Taste gedrückt wird, Berechnungen durchgeführt und in eine Tabelle gedruckt.

Ich habe ein kleines Problem, wenn ich den Knopf drücke, zeigt die Tabelle Component das Antwort-Array ist leer, aber wenn ich es aus dem Konstruktor auf der Konsole ausdrucken, wird alles angezeigt.

Könnte jemand helfen? Ich möchte eine *ngFor machen und die Elemente später durchlaufen.

Service:

@Injectable() 
export class DataService { 

    loanArray: Payment[] = []; 

    setCalculatedPayments(loanSum: number, loanTime:number) { 
    this.loanArray = new PaymentsCalculated(loanSum, loanTime).calculateLoanDetails(); 
    } 

    getCalculatedPayments() { 
    return this.loanArray; 
    } 
} 

Darlehenskomponente:

export class LoanTablesComponent implements OnInit { 

    loanArray: Payment[] = []; // is it always empty? 

    constructor(private DataService: DataService) { 
    this.loanArray = this.DataService.getCalculatedPayments(); 
    // here it prints the loanArray as required 
    // but if I print out in the .html, it is always zero 
    } 

    ngOnInit() { 
    } 

} 

Berechnung Komponente:

export class CalculatorComponent implements OnInit { 

    loanSum: number; 
    loanTime: number; 

    constructor(private DataService: DataService) { 
    setTimeout(() => this.loanSum = 500); 
    setTimeout(() => this.loanTime = 1); 
    // for input sliders 
    } 

    ngOnInit() { 
    } 

    calculatePayments(): void{ 
    this.DataService.setCalculatedPayments(this.loanSum, this.loanTime); 
    } 

} 

Vielen Dank für Hilfe, nur zu lernen und Ratsuchende (:

+0

Was ist die Beziehung zwischen 'CalculatorComponent' und' LoanTablesComponent'? – AngularChef

+0

Rechner zeigt die UI der Eingaben zur Eingabe für Berechnungen an, wenn die Taste gedrückt wird, gibt sie Daten an den Datendienst, die Darlehenstabellen gibt die Tabellen aus und nimmt die Daten vom Datendienst –

+0

in Ordnung. Aber ich meinte, wie sind sie im Komponentenbaum ** verwandt? (Zum Beispiel ist ein Kind des anderen?) Sieht aus wie Sie ein Timing-Problem haben: Sie versuchen, sobald die Daten zu lesen als 'LoanTablesComponent' instanziiert aber ist es nicht gesetzt, bis Sie rufen' setCalculatedPayments() '. Wenn 'loanArray' einen nicht-primitiven Wert enthält, kann die Änderungserkennung nicht mit Ihrer Konfiguration funktionieren. Vielleicht versuchen 'loanArray' in' LoanTablesComponent' von einem [get property] ersetzt (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)? – AngularChef

Antwort

0

In das Ende Ich habe gerade Argument übergeben mit @Output und @Input und Lerndienste sind für andere thigs: D