【问题标题】:How do I create a custom overlay container for angular material如何为角材料创建自定义覆盖容器
【发布时间】:2020-08-25 13:21:38
【问题描述】:

我已尝试遵循 this 指南。

我有一个OverlayContainer 子类

import { OverlayContainer } from '@angular/cdk/overlay';

export class CdkOverlayContainer extends OverlayContainer {
  /**
  * Set the container element from the outside, e.g. from the corresponding directive
  */
  public setContainerElement(element: HTMLElement): void {
    this._containerElement = element;
  }
  /**
   * Prevent creation of the HTML element
   */
  protected _createContainer(): void {
    return;
  }
  
}

然后我有一个指令:

import { Directive, ElementRef, Renderer2 } from '@angular/core';
import { CdkOverlayContainer } from './CdkOverlayContainer';
import {OverlayContainer} from '@angular/cdk/overlay';

@Directive({
    selector: '[myCdkOverlayContainer]'
})
export class CdkOverlayContainerDirective {

    constructor(protected renderer: Renderer2, protected elementReference: ElementRef, protected cdkOverlayContainer: OverlayContainer) {
       
        this.renderer.addClass(this.elementReference.nativeElement, 'cdk-overlay-container');
        (<any>this.cdkOverlayContainer).setContainerElement(this.elementReference.nativeElement);
    }
}

app.module.ts

    { provide: OverlayContainer, useClass: CdkOverlayContainer },

然后我用那个指令添加一个 div

<div myCdkOverlayContainer>
  ...
</div>

得到以下错误:

main.ts:14 TypeError: this.cdkOverlayContainer.setContainerElement is not a function
    at new CdkOverlayContainerDirective (CdkOverlayContainerDirective.ts:13)
    at NodeInjectorFactory.CdkOverlayContainerDirective_Factory [as factory] (CdkOverlayContainerDirective.ts:14)

感谢任何帮助。

【问题讨论】:

    标签: angular angular-material angular-cdk custom-overlay


    【解决方案1】:

    缺少Injectable:

    @Injectable({providedIn: 'root'})
    export class CdkOverlayContainer extends OverlayContainer {
    ...
    

    由于某种原因,@angular/cdk 版本也与 package.json 中的@angular 版本不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2020-08-05
      • 1970-01-01
      • 2019-10-13
      • 2016-02-12
      • 2021-09-27
      • 1970-01-01
      相关资源
      最近更新 更多