【问题标题】:angular2 resolveAndCreate HTTP - missing HTTP_PROVIDERS in RC7angular2 resolveAndCreate HTTP - RC7 中缺少 HTTP_PROVIDERS
【发布时间】:2017-01-22 07:56:48
【问题描述】:

当 HTTP_PROVIDERS 存在时回到 RC4,我可以使用创建自定义 http 实例

export function createHTTP(url:string, headers?:Headers){
  let injector = ReflectiveInjector.resolveAndCreate([
    myHttp,
    {provide:'defaultUrl', useValue:url},
    {provide:'defaultHeaders', useValue:headers || new Headers()},
    ...HTTP_Providers
  ])
  return injector.get(myHttp)
}

myHttp 是 Http 的包装器

@Injectable()
export class myHttp{
  constructor(@Inject('defaultUrl) private url:string, @Inject('defaultHeaders) private headers:Headers, private http:Http){}

  get()
  put()...
}

现在 HTTP_PROVIDERS 已被弃用和删除,我该如何提供它?

谢谢!

【问题讨论】:

  • 为什么要强制创建反射器?
  • 我正在构建一个库以方便访问我的数据库,以便我可以在我的组件(客户端)中使用类似的东西 this.todoDB = createHttp(url, headers) 然后这个。 todoDB.post....
  • 您不需要为此创建自己的注入器。
  • 有没有更优雅的方法来实现这一点? :)
  • 只要求用户导入你的模块。如果你的模块包含imports: [HttpModule] 你应该没问题。并将Http添加到你需要的构造函数constructor(private http:Http) {}

标签: http angular typescript dependency-injection


【解决方案1】:
@NgModule({
  imports: [HttpModule],
  ...
})
class AppModule {}

或将 HTTP_PROVIDERS 的定义从 Angular2 源复制到您的源并像以前一样在那里使用它。

const HTTP_PROVIDERS = [
    {provide: Http, useFactory: 
      (xhrBackend: XHRBackend, requestOptions: RequestOptions): Http =>
          new Http(xhrBackend, requestOptions), 
          deps: [XHRBackend, RequestOptions]},
    BrowserXhr,
    {provide: RequestOptions, useClass: BaseRequestOptions},
    {provide: ResponseOptions, useClass: BaseResponseOptions},
    XHRBackend,
    {provide: XSRFStrategy, useFactory: () => new CookieXSRFStrategy()},
];

您也可以使用这些提供程序自己创建注入器,例如

let resolvedProviders = ReflectiveInjector.resolve(HTTP_PROVIDERS);
let injector = ReflectiveInjector.fromResolvedProviders(resolvedProviders, /* this.injector (parent injector if any) */ );
var http = child.get(Http);

另见Inject Http manually in angular 2

【讨论】:

  • 是否意味着只要在(客户端)AppModule中导入HttpModule,我就不需要再“提供”HTTP_PROVIDERS来注入Http了?我正在编写的代码旨在成为一个库
  • 您不需要它来注入Http,但是当您像在问题中那样自己创建注入器时需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2016-05-09
  • 2016-03-27
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
相关资源
最近更新 更多