Skip to content

Instantly share code, notes, and snippets.

View maxkoretskyi's full-sized avatar

Max Koretskyi maxkoretskyi

View GitHub Profile
@Component({
selector: 'my-app',
template: `
<div><h3>Response</h3>{{response|async|json}}</div>
<button (click)="request()">Make request</button>`
,
})
export class AppComponent {
response: Observable<any>;
constructor(private http: HttpClient) {}
export abstract class HttpHandler {
abstract handle(req: HttpRequest<any>): Observable<HttpEvent<any>>;
}
@maxkoretskyi
maxkoretskyi / scratch_22.ts
Created December 21, 2017 09:29
http-client.module.ts
@NgModule({
providers: [
HttpXhrBackend,
{provide: HttpBackend, useExisting: HttpXhrBackend}
]
})
export class HttpClientModule {}
export abstract class HttpHandler {
abstract handle(req: HttpRequest<any>): Observable<HttpEvent<any>>;
}
export abstract class HttpBackend implements HttpHandler {
abstract handle(req: HttpRequest<any>): Observable<HttpEvent<any>>;
}
export class HttpXhrBackend implements HttpBackend {
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {}
@NgModule({
providers: [
HttpXhrBackend,
{ provide: HttpBackend, useExisting: HttpXhrBackend }
]
})
export class HttpClientModule {}
export class AppComponent {
response: Observable<any>;
constructor(private backend: HttpXhrBackend) {}
request() {
const req = new HttpRequest('GET', 'https://jsonplaceholder.typicode.com/posts/1');
this.response = this.backend.handle(req);
}
}
export class AppComponent {
response: Observable<any>;
constructor(private http: HttpClient) {}
request() {
const url = 'https://jsonplaceholder.typicode.com/posts/1';
this.response = this.http.get(url, {observe: 'body'});
}
}
export class AppComponent {
response: Observable<any>;
constructor(private backend: HttpXhrBackend) {}
request() {
const req = new HttpRequest('GET', 'https://jsonplaceholder.typicode.com/posts/1');
this.response = this.backend.handle(req);
}
}
export class HttpInterceptorHandler implements HttpHandler {
constructor(private next: HttpHandler, private interceptor: HttpInterceptor) {}
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
// execute an interceptor and pass the reference to the next handler
return this.interceptor.intercept(req, this.next);
}
}
export class AppComponent {
response: Observable<any>;
constructor(private backend: HttpXhrBackend) {}
request() {
const req = new HttpRequest('GET', 'https://jsonplaceholder.typicode.com/posts/1');
const handler = new HttpInterceptorHandler(this.backend, new I1());
this.response = handler.handle(req);
}
}