2016-12-18 11 views
3

Предположим, что компонент имеет два жизненный цикл крючки:Может ли ngOnDestroy произойти до ngAfterContentInit?

{ 
    ngAfterContentInit() { 
     this.subscription = rx.Observable 
     .interval() 
     .subscribe(value => this.value = value) 
    }, 
    ngOnDestroy() { 
     this.subscription.unsubscribe() 
    } 
} 

Возможно ли ngOnDestroy быть вызвана перед ngAfterContentInit, и, если да, то почему именно? Это, по-видимому, имеет место при быстром вставке/удалении компонентов в моем приложении. Документы не ясно о предмете.

Я задаю этот вопрос, чтобы знать, если ngOnDestroy не следует полагать, что что-нибудь из другого жизненного цикла обратного вызова определяются и пуленепробиваемые ngOnDestroy должны выполнять присутствие проверку, например:

ngOnDestroy() { 
    this.subscription && this.subscription.unsubscribe() 
} 

ответ

2

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

Кроме того, как видно из this example, процесс компиляции компонентов синхронный. Если есть шаблоны для загрузки, они запрашиваются перед компиляцией.

Инициализация должна привести в этом журнале:

bootstrap 
bootstrap tick 
constructor 
ngOnInit 
ngAfterContentInit 
ngAfterViewInit 
constructor tick 

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

this.subscription && ... проверка не требуется.

+0

Спасибо. Я планирую тщательно оценить ответ, когда у меня будет достаточно времени, чтобы убедиться, что это то, что я искал. –