Aller au contenu

C'est quoi Http Client ?

Le HttpClient est l’utilitaire d’Angular qui permet de faire des requêtes Http en GET, POST, DELETE, PUT etc.

Pour pouvoir utiliser le HttpClient, vous devez ajouter provideHttpClient() dans le tableau de providers de appConfig.

export const appConfig: ApplicationConfig = {
  providers: [provideHttpClient()],
};

Cela a pour effet de mettre à disposition le HttpClient au sein de votre application entière, ainsi vous pourrez faire vos requêtes http.

import { HttpClient } from "@angular/common/http";

@Injectable({ providedIn: "root" })
export class TodosService {
  private readonly http = inject(HttpClient);

  getAllTodos(): Observable<Todo[]> {
    return this.http.get("api/todos");
  }

  getTodoByID(todoID: number): Observable<Todo> {
    return this.http.get(`api/todos/${todoID}`);
  }

  addTodo(todo: Todo): void {
    // le deuxième argument correspond au body
    return this.http.post(`api/todos`, { todo });
  }

  deleteTodo(todoID: number): Observable<Todo> {
    return this.http.delete(`api/todos/${todoID}`);
  }
}

Les différentes méthodes du HttpClient renvoient des Observable, il faut donc subscribe() pour que cela fonctionne.

Note : Si vous voulez en savoir plus sur RxJS, je vous invite à consulter mon article.

A noter que les call http se complete automatiquement lorsqu’ils sont terminés donc dans l’absolu il n’est pas nécessaire de unsubscribe(), mais afin d’éviter des potentiels effets de bords indésirables (requête non terminée car le composant a été détruit avant la fin du call) je vous conseille de toujours vous désabonner.

@Component({
  template: `
    <ul>
      <li *ngFor="let todo of todos$ | async">
        <p>{{ todo.name }}</p>
        <button (click)="delete(todo.id)">delete</button>
      </li>
    </ul>
  `,
})
export class TodosComponent {
  private readonly todosService = inject(TodosService);
  destroyRef = inject(DestroyRef);

  todos$ = this.todosService.getAllTodos();

  delete(todoID: number) {
    this.todosService
      .deleteTodo(todoID)
      .pipe(takeUntilDestroyed(this.destroyRef))
      .subscribe();
  }
}