Angular Portal 与 Overlay 渲染 | ng-hub-ui-portal

Angular portal 库,可在当前 DOM 树之外动态渲染组件、模板和 overlay,并支持定位控制。

API 参考

这里是 portal 的完整契约:你可以绑定、监听、投影和设置主题的一切,都集中在一处。接入你需要的部分,自定义你想要的样式——它是 standalone 的,且对 signal 友好。

输入

通过 15 个输入项精细调校 portal。像绑定任意 Angular @Input 一样绑定它们。

名称类型默认值描述
animationboolean若为 true,portal 的打开和关闭将带有动画。默认值:true
ariaLabelledBystring要设置在 portal 窗口上的 `aria-labelledby` 属性值
ariaDescribedBystring要设置在 portal 窗口上的 `aria-describedby` 属性值
beforeDismiss() => boolean | Promise<boolean>在 portal 即将关闭(dismiss)之前调用的回调。返回 false 可阻止关闭。
containerstring | HTMLElement指定所有新 portal 窗口应附加到的元素的选择器。若未指定,则为 `body`。
injectorInjector用于 portal 内容的 `Injector`,以启用依赖注入。
keyboardboolean若为 true,按下 Escape 键时 portal 将关闭。默认值:true
scrollableboolean可滚动的 portal 内容(默认值为 false)。
windowClassstring附加到 portal 窗口的自定义类,用于自定义样式和定位。
portalDialogClassstring附加到 portal 对话框容器的自定义类。
portalContentClassstring附加到 portal 内容包装器的自定义类。
headerSelectorstringportal 窗口头部元素的自定义选择器。适用于定位特定的 portal 区域。
footerSelectorstringportal 窗口底部元素的自定义选择器。适用于定位特定的 portal 区域。
dismissSelectorstring可触发 portal 窗口关闭(dismiss)的元素的自定义选择器。默认值:`[data-dismiss="portal"]`
closeSelectorstring可触发 portal 窗口关闭(close)的元素的自定义选择器。默认值:`[data-close="portal"]`

输出

尚未记录任何输出项。

方法

通过代码驱动 portal——其编程接口提供 5 个方法。

名称签名返回值描述
HubPortal.openopen(content: any, options?: HubPortalOptions): HubPortalRefHubPortalRef使用指定内容(组件类型、TemplateRef 或字符串)和选项打开一个新的 portal 窗口,并返回用于控制它的 HubPortalRef。内容组件可以注入 HubActivePortal,以便从内部关闭(close)或消除(dismiss)该 portal。
HubPortal.toggletoggle(content: any, options?: HubPortalOptions): HubPortalRefHubPortalRef以 'toggle' 为原因消除(dismiss)当前打开的所有 portal,等待它们完全隐藏,然后以给定的内容和选项显示一个新的 portal。返回新 portal 的引用。
HubPortal.dismissAlldismissAll(reason?: any): void以所提供的原因消除(dismiss)当前显示的所有 portal 窗口。
HubPortal.hasOpenPortalshasOpenPortals(): booleanboolean指示应用中当前是否存在任何打开的 portal 窗口。
HubPortal.activeInstancesactiveInstances: EventEmitter<HubPortalRef[]>EventEmitter<HubPortalRef[]>事件发射器,每当有 portal 被打开或移除时,发出当前打开的 HubPortalRef 实例列表。

模板

打造你自己的样式——1 个模板插槽让你可以投影自定义标记。

名称描述示例
Portal Template可传递给 HubPortal 服务用于动态渲染的模板引用<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>