ค้นหาเว็บไซต์

angular - angular2 resolveAndCreate HTTP - ขาด HTTP_PROVIDERS ใน RC7


ย้อนกลับไปใน RC4 เมื่อ HTTP_PROVIDERS ยังมีอยู่ ฉันสามารถสร้างอินสแตนซ์ 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 ถูกเลิกใช้และเอาออกไปแล้ว ฉันจะจัดหาได้อย่างไร?

ขอบคุณ!

คำตอบ #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);

ดูเพิ่มเติม การฉีด Http ด้วยตนเองใน Angular 2