HttpClient er Angulars indbyggede service til at foretage HTTP-anmodninger. Det returnerer Observables (ikke Promises), integrerer med RxJS-operatorer og understøtter typerede svar, interceptors og fejlhåndtering.
Grundlæggende brug
import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
@Injectable({ providedIn: "root" })
export class UserService {
constructor(private http: HttpClient) {}
getUsers() {
return this.http.get<User[]>("/api/users"); // typed: Observable<User[]>
}
createUser(user: User) {
return this.http.post<User>("/api/users", user); // body as 2nd arg
}
deleteUser(id: number) {
return this.http.delete(`/api/users/${id}`);
}
}
Den generiske (<User[]>) skriver svaret. Anmodninger er lazy — de kører kun når der er abonneret.
Forbrug i en komponent
ngOnInit() {
this.userService.getUsers().subscribe(users => this.users = users);
}
// or with the async pipe (no manual subscribe/unsubscribe):
users$ = this.userService.getUsers();
// template: <li *ngFor="let u of users$ | async">
Anmodningsindstillinger: params, headers
import { HttpParams, HttpHeaders } from "@angular/common/http";
this.http.get("/api/users", {
params: new HttpParams().set("page", "1").set("limit", "10"), // ?page=1&limit=10
headers: new HttpHeaders({ Authorization: `Bearer ${token}` }),
});
Fejlhåndtering med RxJS
import { catchError, retry } from "rxjs/operators";
import { of } from "rxjs";
this.http.get<User[]>("/api/users").pipe(
retry(2), // retry failed requests twice
catchError(err => {
console.error(err);
return of([]); // fallback value, keep the stream alive
})
).subscribe(users => this.users = users);
Fordi det er Observable-baseret, komponerer du gentagelser, fallbacks, timeouts og transformationer med operatorer.
Interceptors håndterer cross-cutting concerns
HTTP interceptors automatically attach auth tokens, log requests,
handle errors globally, or show loading spinners — for ALL requests.
Hvorfor det betyder noget
HttpClient er hvordan Angular-apps kommunikerer med backends — typeret, Observable-baseret og composable med RxJS til gentagelser/fallbacks/transformationer.
Den Observable-natur (versus fetch's Promises) integrerer den med resten af Angular (async pipe, operatorer, interceptors).
At kende typerede anmodninger, indstillinger, fejlhåndtering og parring med async pipe dækker praktisk talt alle datahentingsbehov i Angular.
