【问题标题】:Angular CDK Overlay to one componentAngular CDK 覆盖到一个组件
【发布时间】:2017-11-17 14:37:34
【问题描述】:

我正在尝试使用 CDK 覆盖在特定组件的顶部添加一个材质微调器作为加载指示器。但是,当我将 hasBackdrop 设置为 true 时,整个应用程序将变灰并禁用。我正在尝试从组件传入 viewContainerRef 并使用 connectedTo 定位。我可以移动微调器的位置,但不能改变被背景禁用的区域。

@Injectable()
export class WaitIndicatorService {

    overlayRef: OverlayRef;
    constructor(public overlay: Overlay) { }

    showSpinner(viewContainerRef: ViewContainerRef): void {
        const config = new OverlayConfig();

        config.positionStrategy = this.overlay.position()
/*             .global()
            .centerHorizontally()
            .centerVertically(); */

             .connectedTo(viewContainerRef.element,
            { originX: 'start', originY: 'bottom'},
            { overlayX: 'start', overlayY: 'bottom' });

        config.hasBackdrop = true;

        this.overlayRef = this.overlay.create(config);
        this.overlayRef.attach(new ComponentPortal(WaitSpinnerPanelComponent, viewContainerRef));
    }

    hideSpinner(): void {
        this.overlayRef.dispose();
    }
}

【问题讨论】:

  • 这对你有用吗?
  • 我最终只能忍受整个应用程序的禁用,因为我无法让它在特定组件上工作,而不得不转向其他事情。

标签: angular overlay angular-cdk


【解决方案1】:

您在代码中遗漏的是对您尝试将微调器附加到的特定 DOM 元素的引用。您可以使用cdkOverlayOrigin 指令传递该引用,然后将覆盖层附加到overlayorigin.elementRef,并将config.hasBackdrop 选项设置为false

在宿主组件中:

<div cdkOverlayOrigin #overlayorigin="cdkOverlayOrigin"></div>

@ViewChild(OverlayOrigin) overlayrigin: OverlayOrigin;

在您的微调器组件中:

showSpinner(viewContainerRef: ViewContainerRef, overlayorigin: OverlayOrigin): void {
...
config.positionStrategy = this.overlay.position()
             .connectedTo(overlayorigin.elementRef,
......

【讨论】:

  • 嗨,我想显示特定组件的背景。你能告诉我我该怎么做吗?
  • 我想了解您想要实现的目标。您是否有指向您的项目或测试设置的链接,或者您可以在此处粘贴代码吗?
  • @RedDree 我正在使用内容投影并调用通用组件。我怎样才能将 cdk 覆盖添加到同一个
  • @SunilBehera 如果您发布指向 Stackblitz 项目或任何其他 Angular 游乐场的链接,我可以很高兴地查看您的代码。听起来很有趣。
  • 从你所说的来看,这是非常可行的,因为你的通用组件仍然是一个 Angular 组件,它会呈现一些 HTML。您需要考虑的是 1. 时间(首先渲染什么?在通用组件渲染其子组件之前、期间、之后您可以控制的事件是什么),2. 哪些 HTML 元素可以作为覆盖源即您可以将叠加层附加到什么元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多