使用 CDK/Overlay 创建一个附加到元素的小对话框
Create a Small Dialog Attached to an Element Using CDK/Overlay
我需要创建附加到元素的小对话框。所以我使用它的 ID 找到该元素,然后我需要在它附近显示一个小对话框,其中包含一些文本和按钮。
我需要从服务中执行此操作,因为我需要它是动态的并在不同部分使用。
所以我用它来按 ID 查找元素:
const element = document.querySelector('#' + step.stepAnchor);
我能够生成一个对话框:
// We create the overlay
this.overlayRef = this.overlay.create();
//Then we create a portal to render a component
const componentPortal = new ComponentPortal(PopoverComponent);
// We add a custom CSS class to our overlay
this.overlayRef.addPanelClass("popover");
//We render the portal in the overlay
this.overlayRef.attach(componentPortal);
但我不知道如何将它附加到我需要的元素上。
我建议针对这种情况使用指令而不是定位元素 ID,因为生成的弹出框组件应该相对于页面上的特定元素定位。我做了一个 StackBlitz 来演示我的建议,但它基本上执行您在每个指令实例中编写的设置逻辑,而是更具体地配置它。它还包括一项服务,允许您从任何地方切换任何已注册的弹出窗口:
https://stackblitz.com/edit/angular-ivy-lui6d5?file=src/app/popover-host.directive.ts
我需要创建附加到元素的小对话框。所以我使用它的 ID 找到该元素,然后我需要在它附近显示一个小对话框,其中包含一些文本和按钮。 我需要从服务中执行此操作,因为我需要它是动态的并在不同部分使用。 所以我用它来按 ID 查找元素:
const element = document.querySelector('#' + step.stepAnchor);
我能够生成一个对话框:
// We create the overlay
this.overlayRef = this.overlay.create();
//Then we create a portal to render a component
const componentPortal = new ComponentPortal(PopoverComponent);
// We add a custom CSS class to our overlay
this.overlayRef.addPanelClass("popover");
//We render the portal in the overlay
this.overlayRef.attach(componentPortal);
但我不知道如何将它附加到我需要的元素上。
我建议针对这种情况使用指令而不是定位元素 ID,因为生成的弹出框组件应该相对于页面上的特定元素定位。我做了一个 StackBlitz 来演示我的建议,但它基本上执行您在每个指令实例中编写的设置逻辑,而是更具体地配置它。它还包括一项服务,允许您从任何地方切换任何已注册的弹出窗口:
https://stackblitz.com/edit/angular-ivy-lui6d5?file=src/app/popover-host.directive.ts