如何在 Angular 2 中获取页面主机名?

Ste*_*n D 4 angular2-routing

我需要在 Angular 2 中获取页面的子域,因为它与路由相关。我看到在多次中断发布后,Angular 2 中的路由器服务仍然没有域的概念。同样,Location 服务不知道 URL 的主机部分。

Leo*_*Leo 6

没有获取当前主机的内置方式。

如果你不想window.location直接使用,你可以注入它,即如果你只需要主机,你可以将以下内容添加到模块提供程序中:

{ provide: 'HOST', useValue: window.location.host }
Run Code Online (Sandbox Code Playgroud)

然后你可以将它注入到组件或服务中:

constructor(@Inject('HOST') private host: string) { }
Run Code Online (Sandbox Code Playgroud)

当然,您可以提供整个window对象:

{ provide: Window, useValue: window }
Run Code Online (Sandbox Code Playgroud)

然后注入它:

constructor(private window: Window) { }
Run Code Online (Sandbox Code Playgroud)

更新

第一个选项不适用于 AOT 构建,您应该改用工厂:

export function hostFactory() { return window.location.host; }
Run Code Online (Sandbox Code Playgroud)

然后提供者:

{ provide: 'HOSTNAME', useFactory: hostFactory }
Run Code Online (Sandbox Code Playgroud)