Почему не вызывается, ngOnInit()
когда Injectable
класс разрешен?
Код
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()');
}
}
Консольный выход
FROM constructor()
javascript
angular
typescript
Леви Фуллер
источник
источник
ngOnInit
логику в конструктор дляInjectable
классов? Я только что вспомнил, что читал, что по какой-то причине вы должны держать логику вне конструктора.providers
массивы. Если вам нужен одноэлементный сервис, поместите его в основной модульproviders
, а если вы хотите, чтобы сервисы для каждого компонента добавляли их непосредственно в компонент.ngOnDestroy
призыв к инъекционным услугамЯ не знаю обо всех хуках жизненного цикла, но что касается уничтожения,
ngOnDestroy
фактически вызывается Injectable, когда уничтожается его поставщик (например, Injectable, предоставляемый компонентом).Из
docs :
Если кто-то заинтересован в уничтожении, проверьте этот вопрос:
источник
ngOnInit
не называется :-( Я действительно хотел сделать прозрачную магию отложенной инициализации. ЕслиngOnDestroy
меня можно назвать, я не понимаю, почему init не можетПримечание: этот ответ относится только к угловым компонентам и директивам, а НЕ к услугам.
У меня была такая же проблема, когда
ngOnInit
(и другие хуки жизненного цикла) не запускали мои компоненты, и большинство поисков привело меня сюда.Проблема в том, что я использовал синтаксис функции стрелки (
=>
) следующим образом:По-видимому, это не работает в Angular 6. Использование синтаксиса функции без стрелки решает проблему:
источник
ngOnInit
.Мне пришлось вызывать функцию после инициализации моего dataService, вместо этого я вызывал ее внутри конструктора, который работал для меня.
источник
источник