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(content: any, options?: HubPortalOptions): HubPortalRefHubPortalRefОткрывает новое окно portal с указанным содержимым (тип компонента, TemplateRef или строка) и опциями и возвращает HubPortalRef для управления им. Компоненты содержимого могут внедрить HubActivePortal, чтобы закрыть или отклонить portal изнутри.
HubPortal.toggletoggle(content: any, options?: HubPortalOptions): HubPortalRefHubPortalRefОтклоняет все открытые в данный момент 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>