Если вернуться к сути.
import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Component({ selector: 'app', templateUrl: './app.component.html' }) export class AppComponent implements OnInit { getData(){ return new HttpClient().get('/url'); } Не работает, потому что new HttpClient() требует httpHandler в конструктор. Что угодно туда не подсунешь, потому что должен быть тип httpHandler, класс которого запрятан внутри Ангуляра. Как заставить это работать и почему это работает, если использовать HttpClient стандартно через this компонента? |
Цитата:
Цитата:
import {HttpClient, HttpXhrBackend, XhrFactory} from '@angular/common/http'; class BrowserXhr implements XhrFactory { constructor() {} build(): any { return <any>(new XMLHttpRequest()); } } @Component({ selector: 'app', templateUrl: './app.component.html' }) export class AppComponent implements OnInit { getData(){ return new HttpClient(new HttpXhrBackend(new BrowserXhr())).get('/url').subscribe(); } https://plnkr.co/edit/ifwNLrlNUu2s39Dfqk70?p=preview Цитата:
|
Спасибо! Стало понятнее. Усложнение, конечно ппц какое.
Что же это получается, если я захочу, например, реализовать ресурсный класс как в первом Ангуляре, то мне придется использовать всю эту свистопляску export class Resource { private http constructor( private url: string ) { this.http = new HttpClient(new HttpXhrBackend(new BrowserXhr())); } get() { return this.http.get(this.url).subscribe() } } Делать так constructor( private url: string, private http: HttpClient ) { я конечно не смогу, потому что new Resource(url) будет требовать httpClient вторым параметром P.S. Странно, что в TS делается implements от абстрактного класса |
Часовой пояс GMT +3, время: 10:55. |