У меня следующая структура компонентов: App -> GrandParent -> Parent -> Child
.
- ChildComponennt объявляет
<ng-template cdkPortal>
в своем шаблоне. - Каждый AppComponent, GrandParentComponent и ParentComponent объявляет
<ng-template cdkPortalOutput>
в своих соответствующих шаблонах.
Теперь, если ChildComponent присоединяет свое свойство портала:
- ... к ParentComponent - все работает должным образом.Вы можете обновить
input[text]
, и изменение будет приятно распространено вниз в TemplatePortal. - для GrandParentComponent -
ExpressionChangedAfterItHasBeenCheckedError
выбрасывается во время первого запуска обнаружения изменений.Каждое последующее обновление в input[text]
приводит к одной и той же ошибке.Состояние TemplatePortal находится «на один шаг позади» (то есть, если я введу «abc» во ввод, значение в TemplatePortal равно «ab») - для AppComponent - то же поведение, что и для GrandParentComponent, за исключениемначальная ошибка.
Stackblitz: https://stackblitz.com/edit/portal-cdk?file=src%2Fapp%2Fchild%2Fchild.component.ts (раскомментируйте вызовы в ChildComponent#ngOnInit
)
У кого-нибудь есть объяснение этому поведению?Как правильно использовать портал CDK для отображения TemplatePortal в PortalOutlet, расположенном несколькими компонентами выше?
Спасибо!