Если вернуться к сути.
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, время: 18:51. |