Добавление поддержки полноэкранного режима в Ng-Zorro

RedDeveloper
03.01.2023 21:48
Добавление поддержки полноэкранного режима в Ng-Zorro
Ant design + Angular = ng-zorro

В эти дни я работаю над проектом и выбрал ng-zorro в качестве библиотеки компонентов для этой задачи.

Недавно я добавил полноэкранный режим в свое приложение через requestFullscreen API и заметил, что модалы, меню выбора и т.д. отсутствуют в полноэкранном режиме.

Почему это происходит?

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

Когда мы открываем новый модал или меню выбора, они добавляются в тело документа, и поэтому отсутствуют в полноэкранном режиме.

Они появляются, только если мы входим в полноэкранный режим на всем элементе body.

Существует несколько подходов к модалам, поддерживающим полноэкранный режим:

Изменение OverlyContainer

В итоге я решил проблему в своем проекте с помощью этого решения. ng-zorro использует @angular/cdk за кулисами, который раскрывает нечто под названием FullscreenOverlayContainer.

Простая замена стандартного OverlyContainer на FullscreenOverlyContainer будет обрабатывать полноэкранный режим для вас:

{ provide: OverlayContainer, useClass: FullscreenOverlayContainer,}

Вы не можете запустить полноэкранный режим при просмотре редактора Stackblitz, поэтому попробуйте рабочий пример , а код смотрите здесь .

CSS Fullscreen

Это решение больше похоже на обходной путь к решению проблемы, но оно работает.

Я действительно столкнулся с этим в этом ng-zorro вопросе. В основном решение заключается в том, чтобы ввести полноэкранный режим для элемента body, чтобы модалы и всплывающие окна были включены, и использовать css для приведения содержимого, которое вы действительно хотите, чтобы покрыть весь экран.

Смотрите этот рабочий пример из выпуска.

Добавление к полноэкранному элементу

Это решение не поддерживается ng-zorro, но вы можете найти его полезным в будущем.

Некоторые библиотеки поддерживают определение места прикрепления таких модалов, например @ngneat/dialog и мы можем просто прикрепить наше содержимое к элементу fullscreen, передав параметр container:

import { inject } from '@angular/core';
import { DialogService } from '@ngneat/dialog';

inject(DialogService).open(MyDialogComponent, {
  container: document.fullscreenElement || document.body
});

Таким образом, модал находится под полноэкранным элементом и включен в представление.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.