从 Angular 2 组件访问根 html 标签

Accessing root html tag from an Angular 2 component

所以问题是,是否可以使用渲染器调整主 Angular 2 应用程序组件之外的标签,例如标签?如果是,最好的方法是什么?

让我介绍一下背景。我正在尝试使用 Angular 2 构建一个多语言站点,但遇到了一个我找不到解决方案的问题。问题是我在 html 标签中使用 lang 属性来定义站点在每个时刻使用的语言,例如:

<html lang="en"> // When we have English locale active

因此,当用户点击不同的语言时,我会使用 ng2-translate 更新网站语言,效果非常好。问题是我需要相应地更新 属性 但我无法在 Angular 2 中找到正确的方法(如果可能的话)。 现在,我直接接触 DOM 但这对我不起作用,因为我需要从中抽象出来(我也在使用 Universal,所以我需要服务器端渲染才能工作)。

目前,应用程序的样式依赖于此 属性(我们支持阿拉伯语,这意味着如果 lang="ar" 则更改文本的方向)。我想我可以在我的主要组件上使用 class 或类似的东西,但使用 lang 属性 对我来说似乎是正确的方法。有什么想法吗?

谢谢

您可以使用来自 Angular 的 DOCUMENT DI 令牌执行 Dom 操作:

import { Inject } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { DOCUMENT } from '@angular/common';

export class AppComponent {

    constructor(private translate: TranslateService, @Inject(DOCUMENT) private _document: any) {
        translate.onLangChange.map(x => x.lang)
            .subscribe(lang => this._document.documentElement.lang = lang);
    }
}