Как использовать scrollStrategy в MatDialog?

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

const scrollStrategy = this.overlay.scrollStrategies.reposition();
const dialogRef = this.dialog.open( DialogOverviewExampleDialog, { scrollStrategy } );

Полный пример

Ожидаю, что при прокрутке весь диалог (элемент .cdk-overlay-pane) переместится

Почти правильное поведение

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
35
0
60 673
7

Ответы 7

Если вы хотите прокрутить содержимое диалогового окна, вы должны использовать тег <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

Не так ... Я хочу прокрутить весь диалог. Посмотрите на пример

constantant 25.05.2018 18:41

@dirbacke Бизоны

Martin Cremer 11.06.2019 15:46

Этот ответ не связан с вопросом автора.

WebBrother 16.12.2019 18:17

Пожалуйста, помогите мне здесь stackoverflow.com/questions/59790584/…

Hasani 20.01.2020 14:26

@constantant потрясающий человек.

Santosh 30.12.2020 16:15

Ты только что спас мне жизнь

Shahriar Rahman Zahin 16.01.2021 19:56

сравнить все файлы разницы. в 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 позволяет ему прокручиваться, а все остальное заставляет его лучше помещаться на экране.

Grungondola 26.09.2018 15:33

Я знаю. Я автор кода :) Я хотел бы знать, как реализовать такое же поведение без модификации css. Надеюсь, вы заметили неработающий фоновый щелчок, что является проблемой этого решения.

constantant 27.09.2018 09:45

Еще одна проблема с этим подходом заключается в том, что при попытке открыть диалоговое окно внутри диалогового окна он показывает второй за пределами области просмотра.

Phelipe Rocha 14.12.2018 21:49

В связи с этим, пожалуйста, взгляните на stackoverflow.com/questions/65406048/…

user5663970 22.12.2020 10:20

Поскольку 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
});

Именно то, что я хотел. Непонятно, чего хочет автор.

Brant Unger 07.09.2020 23:10

Привет, попробуй разместить это на своем 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

Daniel Hair 27.09.2020 16:42

Я искал решение, подобное 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

constantant 21.05.2021 10:26

Другие вопросы по теме