3

我正在尝试使用 CDK Overlay 在特定组件的顶部添加一个材质微调器作为加载指示器。但是,当我将 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();
    }
}
4

1 回答 1

1

您在代码中遗漏的是对您尝试将微调器附加到的特定 DOM 元素的引用。您可以使用指令传递该引用,cdkOverlayOrigin然后将叠加层附加到设置为的overlayorigin.elementRefwithconfig.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,
......
于 2018-10-18T15:35:30.360 回答