У меня было приложение Angular 2 и я решил обновить его до Angular 8 (ранее не работал ни с чем более новым, чем 2).
В одном случае у меня есть компонент диалога с динамически загруженным компонентом внутреннего содержимого, но компонент содержимого не получает присвоенные ему переменные. Ранее они были доступны на ngOnInit
, не говоря уже о ngAfterViewInit
, но теперь их нет.
Вот пример кода для конечного объекта (компонента содержимого):
public params: ContentParams;
public isDataValid = true;
public error = '';
constructor() {
}
ngAfterViewInit() {
const o = this;
const t = setTimeout(function() {
console.log(o.params); // works
}, 500);
console.log(this.params); // undefined
}
А вот родительское создание (компонент диалога) + назначение параметров компоненту контента:
ngAfterViewInit(): void {
const factory = this._componentResolver.resolveComponentFactory(this.contentComponentType);
this._dialogContentComponent = this.contentContainerRef.createComponent(factory).instance as IDialogContentComponent<any, any>;
this._changeDetectorRef.detectChanges(); // necessary change for the dialog component to appear
if (this._dialogConfig.contentParams) {
this._dialogContentComponent.params = this._dialogConfig.contentParams;
}
}
Есть ли другое событие жизненного цикла в компоненте контента, на которое мне нужно подписаться? Или это просто неправильный способ работы в новых версиях Angular?