Warum wird nicht ngOnInit()
aufgerufen, wenn eine Injectable
Klasse aufgelöst wird?
Code
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
@Injectable()
export class MovieDbService implements OnInit {
constructor(private _movieDbRest: RestApiService){
window.console.log('FROM constructor()');
}
ngOnInit() {
window.console.log('FROM ngOnInit()');
}
}
Konsolenausgabe
FROM constructor()
javascript
angular
typescript
Levi Fuller
quelle
quelle
ngOnInit
Logik einfach in den Konstruktor fürInjectable
Klassen? Ich habe mich gerade daran erinnert zu lesen, dass Sie aus irgendeinem Grund jede Logik aus dem Konstruktor heraushalten sollten.providers
Arrays. Wenn Sie einen Singleton-Dienstproviders
wünschen, fügen Sie ihn in das Hauptmodul ein , und wenn Sie Dienste pro Komponente wünschen, fügen Sie diese direkt zur Komponente hinzu.ngOnDestroy
für injizierte Dienste aufgerufen wirdIch kenne nicht alle Lifecycle-Hooks, aber was die Zerstörung
ngOnDestroy
betrifft , werde ich tatsächlich auf Injectable aufgerufen, wenn der Provider zerstört wird (zum Beispiel ein Injectable, das von einer Komponente bereitgestellt wird).Von dem
docs :
Nur für den Fall, dass jemand an Zerstörung interessiert ist, überprüfen Sie diese Frage:
quelle
ngOnInit
heißt nicht :-( Ich wollte wirklich eine transparente Magie der verzögerten Initialisierung machen. WennngOnDestroy
sie aufgerufen werden kann, verstehe ich nicht, warum init nicht kannHinweis: Diese Antwort gilt nur für Angular-Komponenten und -Anweisungen, NICHT für Dienste.
Ich hatte das gleiche Problem, als
ngOnInit
(und andere Lifecycle-Hooks) nicht für meine Komponenten ausgelöst wurden, und die meisten Suchanfragen führten mich hierher.Das Problem ist, dass ich die Pfeilfunktionssyntax (
=>
) wie folgt verwendet habe :Anscheinend funktioniert das in Angular 6 nicht. Die Verwendung der Nicht-Pfeil-Funktionssyntax behebt das Problem:
quelle
ngOnInit
.Ich musste eine Funktion aufrufen, nachdem mein dataService initialisiert wurde. Stattdessen habe ich sie im Konstruktor aufgerufen, der für mich funktioniert hat.
quelle
quelle