Portal и рендеринг оверлеев для Angular | ng-hub-ui-portal

Библиотека portal для Angular для динамического рендеринга компонентов, шаблонов и оверлеев вне текущего дерева DOM с контролем позиционирования.

Справочник API

Вот полный контракт portal: всё, что можно привязать, прослушать, спроецировать и тематизировать, собрано в одном месте. Подключите то, что нужно, и оформите так, как хотите — это standalone и дружит с сигналами.

Входные свойства

Настройте portal с помощью 15 входных свойств. Привязывайте их, как любой @Input в Angular.

ИмяТипПо умолчаниюОписание
animationboolean—Если true, открытие и закрытие portal будут анимированы. По умолчанию: true
ariaLabelledBystring—Значение атрибута `aria-labelledby`, устанавливаемое для окна portal
ariaDescribedBystring—Значение атрибута `aria-describedby`, устанавливаемое для окна portal
beforeDismiss() => boolean | Promise<boolean>—Callback непосредственно перед закрытием (dismiss) portal. Верните false, чтобы предотвратить закрытие.
containerstring | HTMLElement—Селектор, указывающий элемент, к которому должны добавляться все новые окна portal. Если не указан, будет `body`.
injectorInjector—`Injector`, используемый для содержимого portal для включения внедрения зависимостей.
keyboardboolean—Если true, portal будет закрыт при нажатии клавиши Escape. По умолчанию: true
scrollableboolean—Прокручиваемое содержимое portal (false по умолчанию).
windowClassstring—Пользовательский класс, добавляемый к окну portal для пользовательского стиля и позиционирования.
portalDialogClassstring—Пользовательский класс, добавляемый к контейнеру диалога portal.
portalContentClassstring—Пользовательский класс, добавляемый к обёртке содержимого portal.
headerSelectorstring—Пользовательский селектор для элемента заголовка окна portal. Полезен для нацеливания на определённые секции portal.
footerSelectorstring—Пользовательский селектор для элемента подвала окна portal. Полезен для нацеливания на определённые секции portal.
dismissSelectorstring—Пользовательский селектор для элементов, которые могут вызвать закрытие (dismiss) окна portal. По умолчанию: `[data-dismiss="portal"]`
closeSelectorstring—Пользовательский селектор для элементов, которые могут вызвать закрытие (close) окна portal. По умолчанию: `[data-close="portal"]`

События

События пока не задокументированы.

Методы

Управляйте portal из кода — 5 методов его программного интерфейса.

ИмяСигнатураВозвращаетОписание
HubPortal.openopen<C = any, R = any>(content: Type<C> | TemplateRef<any> | string, options?: HubPortalOptions): HubPortalRef<C, R>HubPortalRef<C, R>Открывает новое окно portal с указанным содержимым (тип компонента, TemplateRef или строка) и опциями и возвращает HubPortalRef для управления им. Компоненты содержимого могут внедрить HubActivePortal, чтобы закрыть или отклонить portal изнутри.
HubPortal.toggletoggle<C = any, R = any>(content: Type<C> | TemplateRef<any> | string, options?: HubPortalOptions): HubPortalRef<C, R>HubPortalRef<C, R>Отклоняет все открытые в данный момент portal с причиной 'toggle', дожидается их полного скрытия и затем показывает новый portal с указанным содержимым и опциями. Возвращает ссылку на новый portal.
HubPortal.dismissAlldismissAll(reason?: any): void—Отклоняет все отображаемые в данный момент окна portal с указанной причиной.
HubPortal.hasOpenPortalshasOpenPortals(): booleanbooleanПоказывает, есть ли в приложении открытые окна portal в данный момент.
HubPortal.activeInstancesactiveInstances: EventEmitter<HubPortalRef[]>EventEmitter<HubPortalRef[]>Эмиттер событий, испускающий список открытых в данный момент экземпляров HubPortalRef при каждом открытии или удалении portal.

Шаблоны

Сделайте его своим — 1 слотов шаблона позволяют проецировать собственную разметку.

ИмяОписаниеПример
Portal TemplateСсылка на шаблон, которую можно передать в HubPortal service для динамической отрисовки<ng-template #portalTemplate> <div class="portal-content"> <div class="portal-header"> <h4>Portal Title</h4> <button data-dismiss="portal">×</button> </div> <div class="portal-body"> Portal content goes here </div> <div class="portal-footer"> <button data-dismiss="portal">Cancel</button> <button data-close="portal">OK</button> </div> </div> </ng-template> <!-- Open the portal --> <button (click)="portal.open(portalTemplate)">Open Portal</button>