从纯醇”打字稿类访问@角/ HTTP HTTP客户端(Access @angular/http Ht

2019-09-29 07:43发布

我有一个类User不具有任何NG2的元数据,等等。但我想有它访问Http"@angular/http" 。 是什么使这个类到NG DI提供商/注射器系统,这样我可以访问的最佳方法Http

我要为类似如下:

import {Http, Response} from "@angular/http"

export class User {
  constructor(private _email:string){}

  public reload(){
    this.http.get("http://www.example.com")
      .subscribe(...)
  }
}

Answer 1:

我不认为这是一个好主意,但无论如何,看到下面的方法可能怎么做:

Http有相当一些依赖,因此在我看来,最简单的方法是创建在指定的供应商的注射器HttpModule ,然后让喷油器创建一个实例:

constructor() {   
  let injector = ReflectiveInjector.resolveAndCreate([
    {provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions]},
    BrowserXhr,
    {provide: RequestOptions, useClass: BaseRequestOptions},
    {provide: ResponseOptions, useClass: BaseResponseOptions},
    XHRBackend,
    {provide: XSRFStrategy, useFactory: _createDefaultCookieXSRFStrategy},
  ]);
  this.http = injector.get(Http);
}


Answer 2:

假设你的理由使用HTTP服务让人望而兴叹,我想这会工作作为替代冈特的回答:

如果导入HttpModule在应用层面:

import { HttpModule } from '@angular/http';

@NgModule({
  imports:      [ ..., HttpModule, ...],
  declarations: [ ... ],
  bootstrap:    [ ... ]
})
export class AppModule { }

其次,我认为该自动注射器将在您的用户类的工作:

import {Http, Response} from "@angular/http"

export class User {
  constructor(private http: Http, private _email:string){}

  public reload(){
    this.http.get("http://www.example.com")
      .subscribe(...)
  }
}

它感觉比试图建立在运行一个新的喷油器更安全。



文章来源: Access @angular/http Http Client from Plain Ol' TypeScript Class
标签: angular