ReflectiveInjector
我最后使用的是
non-angular Http module
BrowserXhr
@angular/http
编辑(2019年4月)
import { HttpBackend, HttpClient, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HTTP_INTERCEPTORS, XhrFactory, ɵangular_packages_common_http_http_d as BrowserXhr, ɵHttpInterceptingHandler } from "@angular/common/http";
import { Injector } from '@angular/core';
import { NSFileSystem } from "nativescript-angular/file-system/ns-file-system";
import { NsHttpBackEnd } from "nativescript-angular/http-client/ns-http-backend";
import { Observable } from 'rxjs';
export class TestInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log("intercepted", req);
return next.handle(req);
}
}
const httpClientInjector = Injector.create([
{
provide: HttpClient, useClass: HttpClient, deps: [
HttpHandler
]
},
{ provide: HttpHandler, useClass: ɵHttpInterceptingHandler, deps: [HttpBackend, Injector] },
{ provide: HTTP_INTERCEPTORS, useClass: TestInterceptor, multi: true, deps: [] }, // remove or copy this line to remove/add more interceptors
{ provide: HttpBackend, useExisting: NsHttpBackEnd },
{ provide: NsHttpBackEnd, useClass: NsHttpBackEnd, deps: [XhrFactory, NSFileSystem] },
{ provide: XhrFactory, useExisting: BrowserXhr },
{ provide: BrowserXhr, useClass: BrowserXhr, deps: [] },
{ provide: NSFileSystem, useClass: NSFileSystem, deps: [] }
]);
export const httpClient = httpClientInjector.get(HttpClient);
缺少此实现
HttpClientXsrfModule
https://github.com/NativeScript/NativeScript/issues/2424
export class MyService {
constructor(private http: HttpClient) { }
}
Injector.create[
)以下内容:
{ provide: MyService, useClass: MyService, deps: [HttpClient] }
const myService = httpClientInjector.get(MyService);