2017-02-08 4 views
0

Ich kann das nicht herausfinden. Ich habe eine OnInit-Funktion, die ein Ergebnis vom Server erhält. mit diesem Ergebnis erwarte ich eine Funktion auszuführen, die angular2 „this.secondsToTime ist keine Funktion“Zugriff auf die Funktion innerhalb der Komponente nicht möglich - Angular2

Hier ist mein Code beschwert:

ngOnInit() { 
    this.user = this._authService.user; 
    this._globalService.getPrintTimer().subscribe(
     suc => { 
      this.secondsToTime(suc.response); 
     }, 
     err => { 
      console.log("Could not load timer"); 
     } 
    ); 
} 

secondsToTime(time) { 
    console.log("secondsToTime"); 
    setTimeout(function() { 
     time--; 
     time = Math.round(time); 
     var hours = Math.floor(time/(60 * 60)); 

     var divisor_for_minutes = time % (60 * 60); 
     var minutes = Math.floor(divisor_for_minutes/60); 

     var divisor_for_seconds = divisor_for_minutes % 60; 
     var seconds = Math.ceil(divisor_for_seconds); 

     this.countDown = minutes + ":" + seconds; 
    }, 1000); 
} 
+0

Dies könnte sich auf einen internen aufrufenden Funktionsbereich beziehen. Versuchen Sie hier, eine Referenz außerhalb als var zu speichern. That = this vor Aufruf und dann this.secondsToTime (suc.response); –

+0

Fügen Sie eine 'console.log (this);' in Ihrem Erfolg Callback und lassen Sie uns wissen, was Sie bekommen. – Chris

Antwort

0

Das Problem kann der Umfang sein, wenn Versprechen mit oder Observiert, dass der in den Callback-Funktionen abgerufene Bereich (Erfolg, Fehler, schließlich vollständig) der Klasse entspricht, in der er deklariert wurde. Ich habe diesen Fehler beim Schreiben von Code in ES5, ES6 erhalten und habe ihn seit dem Beginn der Verwendung von Pfeilfunktionen zum Deklarieren meiner Funktionen/Methoden nicht mehr gesehen, da Pfeilfunktionen blockweise sind.

Um das gleiche in Ihrem Fall zu lösen, diese Änderung im Code funktionieren sollte:

ngOnInit() { 
    this.user = this._authService.user; 
    this._globalService.getPrintTimer().subscribe(
     suc => { 
      this.secondsToTime(suc.response); 
     }.bind(this), 
     err => { 
      console.log("Could not load timer"); 
     }.bind(this) 
    ); 
} 

habe ich eine plnkr, um den Fehler zu wiederholen, konnte aber nicht mit dem Code, da Ihr bereitgestellt replizieren Sie Pfeil-Funktionen verwenden, der Code in der globalService kann einige weitere nützliche Informationen liefern jedoch das gleiche Problem repliziert werden können, wenn Pfeil Funktionen durch Funktion ersetzt werden() {}, modifizierte Code:

ngOnInit() { 
    this.user = this._authService.user; 
    this._globalService.getPrintTimer().subscribe(
     function(suc) { 
      this.secondsToTime(suc.response); 
     }.bind(this), 
     function(err) { 
      console.log("Could not load timer"); 
     }.bind(this) 
    ); 
} 

wenn wir entfernen die bind() Methode werden wir bekommen Der Fehler, this.secondsToTime, ist nicht definiert. Hier ist Link zu PLNKR für das gleiche: https://plnkr.co/edit/vMbkdG4F5CbQxfyXGIHQ?p=preview.

Sie können versuchen, die Bindefunktion im PLNKR zu entfernen und den Fehler im Terminal zu überprüfen.

Verwandte Themen