2016-01-31 3 views
90

Почему не ngOnInit() называется, когда разрешен класс Injectable?ngOnInit не вызывается, когда инициируется класс инъекций

Код

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()'); 
    } 

} 

Console Output

FROM constructor() 

ответ

157

Lifecycle hooks, как OnInit() работы с директивами и компонентов. Они не работают с другими типами, такими как служба в вашем случае. Из документов:

Компонент имеет жизненный цикл, которым управляет сам Угловой. Угловой создает его, визуализирует, создает и отображает его дочерние элементы, проверяет его, когда его свойства привязаны к данным, и уничтожает его перед удалением из DOM.

Директивы и экземпляры компонентов имеют жизненный цикл, поскольку Angular создает, обновляет и уничтожает их.

+16

Так просто переместите мою логику 'ngOnInit' в конструктор для' Injectable' классов? Я просто помнил, что читал, что по любой причине вы должны оставить какую-либо логику вне конструктора. –

+25

@ LeviFuller Yea, для служб, которые вы можете выполнить инициализацию в конструкторе, или лучше сделать метод init и вызвать его из конструктора (в случае необходимости сбросить службу позже). – Sasxa

+0

Отлично. Спасибо друг. Я предполагаю, что причина в том, что компоненты будут создаваться только один раз, поэтому конструктор будет вызываться только в первый раз, а ngOnInit будет вызываться каждый раз, когда компонент визуализируется. Правильно ли это? –

18

Я не знаю обо всех этапах жизненного цикла крючков, но для уничтожения ngOnDestroy фактически дозвонились на Инъекционные когда это поставщик уничтожается (например, инъекционные поставляется компонента).

Из документов (https://angular.io/docs/ts/latest/api/core/index/OnDestroy-class.html):

Жизненный цикл крюк, который вызывается, когда директива, труба или служба разрушается.

Только в случае, если кто-либо заинтересован в уничтожении как этот вопрос: Life-cycle methods for services in angular2

-1

методы жизненного цикла для услуг уже охвачены другими, я делюсь понятия о методах жизненного цикла в целом

Угловые методы цикла 4 жизни

ngOnInit(), ngOnChanges() и ngOnDestroy() и т. Д. - это методы жизненного цикла. ngOnChanges() будет первым, который будет называться, до ngOnInit(), когда значение связанного свойства изменится, оно НЕ будет вызываться, если нет изменений. ngOnDestroy() вызывается, когда компонент удален. Чтобы использовать его, OnDestroy должен быть implement ed классом.

Смежные вопросы