2017-02-05 2 views
0

Wenn AuthService => login genannt wird, fügt der Logger richtig Foo! im Browser-Konsole aber wenn ErroHandler => handleError genannt wird, die Instanz des Loggers immer nicht definiert ist (außer in den Konstruktor der Klasse). Ich habe erwartet, dass Bar! auch in der Browser-Konsole angehängt wird. Kann mir jemand dieses Verhalten erklären?Angular2 Dienstleistungen Dependency Injection

Referenz: https://embed.plnkr.co/cKwT5R39IL1TTJBRvZyY/

+2

sein, was Sie, dass es machte denken wird nicht richtig gespritzt? Bitte geben Sie die Details an, die das Problem in der Frage selbst erklären. Nach meinem Wissen ist es nicht erlaubt, einen Plunker-Link ohne relevanten Code zu posten (dafür gibt es im SO-Editor einen Schutz, der aber umgangen wurde). – estus

Antwort

1

Das Problem hat nichts mit Dependency Injection zu tun. Wenn ein DI-Problem auftritt, führt dies zu einer Fehlermeldung vom Compiler.

Dies geschieht, weil errorHandler.handleError Methode als Rückruf hier übergeben wird:

.catch(this.errorHandler.handleError); 

und ist nicht richtig an den Kontext gebunden.

Dies ist ein typischer Fehler. Es sei denn, es ist bekannt, dass Objektmethode auf Objektkonstruktion gebunden wurde (dies ist eine gute Gewohnheit für Methoden, die als Rückrufe von Design verwendet werden sollen), sollte es immer wie

.catch(err => this.errorHandler.handleError(err));