获取Angular2服务的域名

10 浏览
0 Comments

获取Angular2服务的域名

我需要向同一服务器的另一个端口发送请求,REST API。

我如何在服务网址中不硬编码完整名称的情况下实现这一点?

0
0 Comments

问题出现的原因:在Angular 2中,获取服务的域名时,使用了Location服务,但是这个服务在某些情况下无法正常工作。

解决方法:使用Window对象来获取服务的域名。

具体步骤如下:

1. 在app.module.ts文件中,添加以下代码:

providers: [
    {provide: Window, useValue: window},
    ...
]

2. 在youclass.ts文件中,添加以下代码:

constructor(
    (Window) private _window: Window
) {
    this._baseUrl = `http://${this._window.location.hostname}:3333`;
};

通过以上步骤,可以正常获取到服务的域名,解决了使用Location服务无法获取域名的问题。

0
0 Comments

问题出现的原因是在Angular2中,使用DOCUMENT来获取服务的域名时,导入的路径错误,导致无法使用DOCUMENT。

解决方法是将导入路径改为从"/common"中导入DOCUMENT,或者直接使用document.location.origin来获取域名。

以下是整理后的文章:

在Angular2中,获取服务的域名有多种方法。其中一种方法是使用/platform-browser中的DOCUMENT。

import { DOCUMENT } from '/platform-browser';
constructor(private document: Document) {
    let url = document.location.protocol + '//' + document.location.hostname + ':my_port';
}

但是,有人提出了一个问题:这与使用document.origin是不是一样的呢?

实际上,DOCUMENT并不是/platform-browser的一个被记录在官方文档中的部分。因此,我们在使用DOCUMENT时会遇到错误:"platform-browser/platform-browser"没有导出成员'DOCUMENT'。

解决这个问题的方法有两种。第一种方法是从/common中导入DOCUMENT:

import { DOCUMENT } from '/common';
constructor(private document: Document) {
    let url = document.location.protocol + '//' + document.location.hostname + ':my_port';
}

另一种方法是直接使用document.location.origin来获取域名:

constructor() {
    let url = document.location.origin + ':my_port';
}

无论选择哪种方法,都可以成功获取到服务的域名。

0
0 Comments

从上面的内容中,我们可以整理出以下问题的出现原因和解决方法:

问题:如何在Angular2中获取服务的域名?

原因:在Angular2中,如果想要获取服务的域名,不能直接使用window.location.hostname,而需要通过一些特殊的方法来实现。

解决方法(Angular 6+):

1. 在一个单独的文件中创建一个WINDOW_PROVIDERS数组,用于提供Window对象的注入。

2. 在AppModule的providers数组中添加WINDOW_PROVIDERS。

3. 在SampleService中,通过使用Injection Token来注入window对象。

解决方法(Angular 2):

1. 在启动应用程序时,需要设置Window对象的提供器。

2. 在构造函数中使用Window对象来获取域名。

以上就是解决这个问题的方法。

0