Por que não é ngOnInit()
chamado quando uma Injectable
classe é resolvida?
Código
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()');
}
}
Saída do console
FROM constructor()
javascript
angular
typescript
Levi Fuller
fonte
fonte
ngOnInit
lógica para o construtor deInjectable
classes? Lembrei-me de ler que você deve manter qualquer lógica fora do construtor por qualquer motivo.providers
matrizes. Se você deseja um serviço singleton, coloque-o no módulo principalproviders
e, se desejar serviços por componente, adicione-os diretamente ao componente.ngOnDestroy
é chamado para serviços injetadosNão conheço todos os ganchos do ciclo de vida, mas quanto à destruição,
ngOnDestroy
na verdade , recebo o Injectable quando seu provedor é destruído (por exemplo, um Injectable fornecido por um componente).De
docs :
Caso alguém esteja interessado em destruição, verifique esta pergunta:
fonte
ngOnInit
. Não é chamado :-( eu realmente queria fazer alguma mágica de inicialização atrasada transparente SengOnDestroy
pode ser chamado Eu não vejo por que o init não podeNota: esta resposta se aplica apenas a componentes e diretivas angulares, NÃO a serviços.
Eu tive esse mesmo problema quando
ngOnInit
(e outros ganchos do ciclo de vida) não estavam disparando para meus componentes, e a maioria das pesquisas me levou até aqui.O problema é que eu estava usando a sintaxe da função de seta (
=>
) assim:Aparentemente, isso não funciona no Angular 6. O uso de sintaxe de função que não seja da seta corrige o problema:
fonte
ngOnInit
.Eu tive que chamar uma função depois que meu dataService foi inicializado, em vez disso, chamei dentro do construtor, que funcionou para mim.
fonte
fonte