从 Angular 11 更新到 12 时,MatSelect overlayDir 现在是私有的。我现在如何访问它?

MatSelect overlayDir now private when updating from Angular 11 to 12. How do I access it now?

在Angular11中,在node_modules@angular\material\select中有一个变量:

/**
     * Overlay pane containing the options.
     * @deprecated To be turned into a private API.
     * @breaking-change 10.0.0
     * @docs-private
     */
    overlayDir: CdkConnectedOverlay;

Angular 12 中的内容现已更改为:

/** Overlay pane containing the options. */
    protected _overlayDir: CdkConnectedOverlay;

这当然打破了我对overlayDir的所有用法例如:

let selectionOverlay = this.quickFiltersSelect
              .overlayDir as CdkConnectedOverlay;

给我 TS 错误: Property 'overlayDir' does not exist on type 'MatSelect' ......这是有道理的。现在它受到保护了。所以我将 .overlayDir 更改为 ._overlayDir,现在得到 TS 错误:

Property '_overlayDir' is protected and only accessible within class '_MatSelectBase<C>' and its subclasses.

然后我导入了 _MatSelectBase 但我不确定用什么替换它,或者我是否应该以这种方式访问​​受保护的属性。我认为 _MatSelectBase 是一个通用的,所以它正在寻找 _MatSelectBase<C> 但我不再确定我在正确的道路上。

谁能告诉我哪里出错了,解决方案是什么?

谢谢。

官方回复如下:

https://github.com/angular/components/issues/23625

“我们不再将下拉菜单置于 select 之上。您可以尝试我们基于 MDC 样式的新 select。API 和行为完全相同,因为它与当前 select 共享相同的基础 class,但 CSS 会略有不同,下拉列表仅位于 above/below ]。您可以通过从 @angular/material-experimental/mdc-select 而不是 @angular/material/select 导入 MatSelectModule 来尝试它。"

所以,答案是,没有使用实际 select 组件的答案。现在,如果我们不想让选项位于 select.

之上,我们将不得不使用实验组件