获取Angular2服务的域名
问题出现的原因:在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服务无法获取域名的问题。
问题出现的原因是在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'; }
无论选择哪种方法,都可以成功获取到服务的域名。
从上面的内容中,我们可以整理出以下问题的出现原因和解决方法:
问题:如何在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对象来获取域名。
以上就是解决这个问题的方法。