Угловой материал. Диалоговые действия вне экрана на мобильных устройствах

У меня проблема с mat-dilog на мобильных устройствах. На мобильных устройствах с альбомной ориентацией кнопки мат-диалог-действия находятся за пределами экрана, поэтому закрыть диалог невозможно.

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

// Dialog close button for mobile devices    
.dialog-close-btn {
  visibility: hidden;
}

@media screen and (max-width: 799px) and (orientation: landscape) {
  .dialog-close-btn {
    visibility: visible;
  }
}

Это работает, но, как я уже сказал, это много повторяющегося кода и ненужной работы. Может кто сталкивался с такой проблемой и есть более простое решение. Кстати, я также заметил, что в полноэкранном режиме Chrome этой проблемы нет, может быть, на мобильных устройствах можно открывать диалоги в полноэкранном режиме? Буду признателен за любой совет).

Уменьшить диалог.....

Reactgular 29.01.2019 14:35

Подумал, но на устройствах с диагональю менее 7" блок мат-диалога-контента будет слишком мал и неудобен

Alex Bryanskiy 29.01.2019 14:46

Что есть, то есть. Это мобильное устройство в ландшафтном режиме, и вы пытаетесь отобразить диалоговое окно с кнопками в нижнем колонтитуле. Мы не можем рассказать вам, как сделать UX-дизайн вашего приложения. Angular Material не имеет каких-либо диалоговых функций для обработки этого размера экрана. Поэтому вам придется обрабатывать этот случай по своему усмотрению с помощью пользовательской логики.

Reactgular 29.01.2019 14:46
Тестирование функциональных 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
3
3
7 469
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я немного поискал, и похоже, что сделать диалог в полноэкранном режиме может быть хорошим решением (http://answersicouldntfindanywhereelse.blogspot.com/2018/05/angular-material-full-size-dialog-on.html). Я знаю, что это снижает эффект наличия диалога, но я заметил, что они могут быть сложными на мобильных устройствах, если вы не можете уменьшить содержимое. Вы также можете оформить заказ https://github.com/angular/material2/issues/10094

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

Основываясь на ответе @Derek Schmid,

  let dialogConfig = new MatDialogConfig();

  dialogConfig = {
    width: '80vw',
    maxHeight: '100vh',
  };

Теперь я использую этот набор конфигураций.
ширина, minWidht, maxWidht на ваш выбор.

Дело в том, чтобы установить «maxHeight» как «100vh» и не устанавливать значение свойства «height».

Это работает для меня в двух точках.

1) Это не полноэкранный режим, поэтому я все еще могу использовать значение диалогового окна (в большинстве случаев).
2) При маленьком размере экрана (по высоте, например, на мобильных устройствах) и весь мат-диалог, и мат-диалог-контент становятся прокручиваемыми (а не только мат-диалог-контент).

Попробуйте это :)

Мат диалога предполагает, что заголовок и действия поместятся в одну строку. Если в вашем случае заголовок и/или действия занимают больше строк, вы можете захотеть поместить их все внутри контента и вообще не использовать часть mat-dialog-title.

<div mat-dialog-content class = "details">
    <h1 *class = "title">{{data.title}}</h1>
    <div> Your content here</div>
</div>
<div mat-dialog-actions>
</div>

Содержимое диалогового окна по умолчанию имеет стиль max-height65vh (*), что может привести к недоступному отображению действий под нижней частью экрана, если раздел заголовка или действий выше 1 строки (как @now отметил).

Это можно смягчить, применив пользовательский стиль к классу CSS .mat-dialog-content в файле стиля компонента, чтобы уменьшить максимальную высоту, выделяемую содержимому:

// In dialog-component.css

.mat-dialog-content {
  max-height: 50vh;
}

Чтобы применить это в файле глобального стиля, используйте !important, чтобы принудительно переопределить стиль по умолчанию:

// In global styles.css

.mat-dialog-content {
  max-height: 50vh !important;
}

(*) Это основано на Angular Material 12.2.6.

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