ngOnInit Non appelé lorsque la classe Injectable est instanciée
pourquoi ngOnInit()
n'est-il pas appelé lorsqu'une classe Injectable
est résolue?
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()');
}
}
Sortie De La Console
FROM constructor()
3 réponses
Lifecycle hooks , comme OnInit()
travailler avec des Directives et des composants. Ils ne travaillent pas avec d'autres types, comme un service dans votre cas. De docs:
un composant a un cycle de vie géré par Angular lui-même. Angular le crée, le rend, crée et rend ses enfants, le vérifie lorsque ses propriétés liées aux données changent et le détruit avant de le retirer du DOM.
Directive et les instances de composants ont un cycle de vie comme Angular les crée, les met à jour et les détruit.
Je ne sais pas sur tous les crochets de cycle de vie, mais en ce qui concerne la destruction, ngOnDestroy
réellement obtenir appelé sur Injectable quand son fournisseur est détruit (par exemple un Injectable fourni par un composant).
de la docs :
crochet du cycle de vie qui s'appelle lorsqu'une directive, pipe ou service est détruite.
juste au cas où tout le monde est intéressé par destruction vérifier ce question:
j'ai eu ce même problème quand ngOnInit
(et d'autres crochets lifecycle) ne tiraient pas pour mes composants, et la plupart des recherches m'ont mené ici.
le problème est que j'ai utilisé la syntaxe de la fonction Flèche ( =>
) comme ceci:
class MyComponent implements OnInit {
public ngOnInit = () => {
console.log("ngOnInit");
}
}
apparemment, ça ne marche pas en angle 6. L'utilisation de la syntaxe de fonction non-Flèche corrige le problème:
class MyComponent implements OnInit {
public ngOnInit() {
console.log("ngOnInit");
}
}