Я пытался сделать прокрутку для диалога в стратегии репозиции, но у меня это не работает.
const scrollStrategy = this.overlay.scrollStrategies.reposition();
const dialogRef = this.dialog.open( DialogOverviewExampleDialog, { scrollStrategy } );
Ожидаю, что при прокрутке весь диалог (элемент .cdk-overlay-pane) переместится





Если вы хотите прокрутить содержимое диалогового окна, вы должны использовать тег <mat-dialog-content> или использовать директиву mat-dialog-content в своем элементе div.
В вашем примере вместо этого попробуйте следующее:
<h1 mat-dialog-title>Hi {{data.name}}</h1>
<mat-dialog-content> <!-- instead of your <div> or use <div mat-dialog-content> -->
<p>What's your favorite animal!!!!!!!</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal?</p>
<p>What's your favorite animal!!!!!!</p>
<mat-form-field>
<input matInput [(ngModel)] = "data.animal">
</mat-form-field>
</mat-dialog-content> <!-- instead of your </div> -->
<div mat-dialog-actions>
<button mat-button (click) = "onNoClick()">No Thanks</button>
<button mat-button [mat-dialog-close] = "data.animal" cdkFocusInitial>Ok</button>
</div>
И теперь у вашего содержимого диалогового окна должна быть прокрутка сбоку. Подробнее о Контейнер прокручиваемого содержимого диалогового окна читайте на:
https://material.angular.io/components/dialog/api#MatDialogContent
@dirbacke Бизоны
Этот ответ не связан с вопросом автора.
Пожалуйста, помогите мне здесь stackoverflow.com/questions/59790584/…
@constantant потрясающий человек.
Ты только что спас мне жизнь
сравнить все файлы разницы. в style.css есть лишний css
.cdk-global-overlay-wrapper {
pointer-events: auto;
display: block;
position: relative;
overflow: auto;
text-align: center;
}
.cdk-global-overlay-wrapper::before {
content: '';
display: inline-block;
height: 100%;
white-space: nowrap;
}
.cdk-overlay-pane {
display: inline-block;
position: relative;
text-align: left;
white-space: normal;
}Я заметил то же самое. Компонент overflow: auto позволяет ему прокручиваться, а все остальное заставляет его лучше помещаться на экране.
Я знаю. Я автор кода :) Я хотел бы знать, как реализовать такое же поведение без модификации css. Надеюсь, вы заметили неработающий фоновый щелчок, что является проблемой этого решения.
Еще одна проблема с этим подходом заключается в том, что при попытке открыть диалоговое окно внутри диалогового окна он показывает второй за пределами области просмотра.
В связи с этим, пожалуйста, взгляните на stackoverflow.com/questions/65406048/…
Поскольку https://github.com/angular/material2/pull/11235, .mat-dialog-container получил max-height: inherit, который должен решить вашу проблему.
Установка maxHeight: window.innerHeight + 'px' в конфигурации диалогового окна предотвращает увеличение размера диалогового окна, превышающего размер экрана.
Я пробовал вот так,
const dialogRef = this.dialog.open(LoginModalComponent, {
autoFocus: false,
maxHeight: '90vh' //you can adjust the value as per your view
});
Именно то, что я хотел. Непонятно, чего хочет автор.
Привет, попробуй разместить это на своем style.css или style.scss
.cdk-global-overlay-wrapper {
display: flex;
position: absolute;
z-index: 1000;
overflow: auto;
pointer-events: auto;
}
Убедитесь, что у указателей-событий есть! Important, если вы не увеличиваете область действия класса. Но вот что я сделал, как и ваш: .cdk-overlay-container> .cdk-global-overlay-wrapper {overflow: auto; указатель-события: авто; }. Но обратите внимание на область действия cdk-overlay-container
Я искал решение, подобное OP. Уловка в предоставленном пример состоит в том, чтобы установить overflow:auto на .cdk-global-overlay-wrapper.
Добавьте этот CSS в свои стили (не внутри диалогового css):
.cdk-global-overlay-wrapper {
overflow: auto;
}
Если вы хотите предотвратить прокрутку на заднем фоне, то есть родительском компоненте, вы может установить overflow: hidden для родителя, пока диалог открыт.
.. просто удалите стратегию прокрутки из примера.
Достаточно добавить два атрибута ниже.
.cdk-global-overlay-wrapper {
overflow: auto;
pointer-events: auto;
}
В этом случае фоновое нажатие не работает. Посмотрите на исходный пример stackblitz.com/edit/angular-ss6wkf-zzzqdt?file=styles.css
Не так ... Я хочу прокрутить весь диалог. Посмотрите на пример