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()
123
demandé sur student 2016-01-31 08:33:22

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.

214
répondu Sasxa 2018-09-07 05:26:17

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:

30
répondu SBD580 2018-03-27 11:31:25

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");
    }
}
0
répondu AJ Richardson 2018-05-29 14:15:55