如何在运行时更改 Angular CDK 覆盖的 dir 属性?

Posted

技术标签:

【中文标题】如何在运行时更改 Angular CDK 覆盖的 dir 属性?【英文标题】:How to change dir property of the Angular CDK overlay at runtime? 【发布时间】:2021-04-11 13:55:36 【问题描述】:

我使用的是 Angular 10,点击后会执行以下函数来执行方向更改:

private changehtmlDirection(direction: 'rtl' | 'ltr') 
    document.getElementsByTagName("html")[0].dir = direction;

效果很好,只是 Angular CDK 没有更新。

我试图找到一个 API 来在运行时更改 Angular CDK 的方向,但找不到任何 API。 我看到有一个BidiModule,但它仅用于获取当前方向而不是设置它。

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

根据材料文档,您不能更改“html”标签上的“dir”,以免影响 bidi API。您可以在以下链接中查看文档: bi-directionality document

但是,如果您想使用材料双向性,您可以将 'dir' 指令添加到根组件中的容器元素,如下所示:

<div [dir]="documentDirection"> </div>

每当“documentDirection”变量发生变化时,都会发出双向“变化发射器”。 像下面的代码你可以订阅它:

constructor(
private dir: Directionality ) 
this.isRtl = dir.value === 'rtl';
 this.dir.change.subscribe(() => 
  this.isRtl = !this.isRtl;
 );

【讨论】:

以上是关于如何在运行时更改 Angular CDK 覆盖的 dir 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Angular CDK 拖放的 z-index?

如何使用 @angular/cdk 使 NgbModal 可拖动

如何在角度5中禁用或覆盖cdk-focused

Angular CDK拖放 - 如何保持原始位置?

Angular Material Snackbar 位置

Angular Cdk步进器,如何检测何时添加了新步骤