从 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.
之上,我们将不得不使用实验组件
在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.
之上,我们将不得不使用实验组件