Это потому, что выпадающий список на самом деле является частью cdk-overlay-container
, а не частью matAutocomplete
..., который запускается только matAutocomplete
для визуализации в cdk-overlay-container
с вычисленным top
положение, основанное на расположении поля matAutocomplete input
во время взаимодействия пользователя с полем.
Важное примечание: Контейнер CDK является прозрачным и имеет полную высоту иширина порта просмотра корневого браузера, перекрывая все в вашем приложении.
Если вы поместите этот matAutocomplete
в середину диалога, откройте, затем закройте ... немного прокрутите позицию, снова откройте matAutocomplete
... вы заметите, что он рендерится в новой позиции с недавно вычисленным top
, а не со старым ....
Как только он рендерится и в DOM через cdk-overlay-container
однако, нет события прокрутки в реальном времени, чтобы заставить cdk-overlay-container
«пересчитать» верхнюю позицию с событием прокрутки.
Я думаю, что идея заключается в том, что пользователи, которыевзаимодействие с автозаполнением обычно непрокручивая при этом ... так как они активно ищут значение ... после выбора ... они затем переходят к пользовательскому интерфейсу.
Если вы заметили, как только вы взаимодействуете сmat-select
в том же диалоговом окне вы не можете прокрутить, пока оно открыто ... Я думаю, что они сделали это по этой конкретной причине, так как он также использует cdk-overlay-container
для рендеринга выпадающего меню ... Я не совсем ясноо том, почему matAutocomplete
не ведет себя так же.
Если вы поместите это в свой компонент css, а затем откроете диалоговое окно, вы увидите диалоговое окно, и раскрывающийся список является частью этого "скрытый "контейнер .... даже автозаполнение перед открытием диалогового окна выставляет этот контейнер, и вы можете видеть, что выпадающий список не красный ... но все, что находится под ним.
::ng-deep .cdk-overlay-container{
background-color: #ff000087;
}
Дополнительная информация о CDK здесь.
https://material.angular.io/cdk/overlay/overview