Reference · Frontend · Angular 16

Forms, HttpClient, dan HTTP Interceptor

Ringkasan satu halaman. Dari Lesson 0016.

Reactive vs template-driven

Reactive (ReactiveFormsModule)Template-driven (FormsModule)
Form modeleksplisit di class (FormGroup, FormControl, FormBuilder)implisit, dibuat ngModel
Data modelterstruktur, immutabletidak terstruktur, mutable ([(ngModel)])
Data flowsinkronasinkron (tick berikutnya)
Validasifungsi (Validators.required, custom = fungsi)directive (required, custom = directive)
Testtanpa render UIbutuh change detection + fakeAsync/tick
Pilih kalauform besar, dinamis, banyak validasi, perlu diujiform kecil (signup email)
Reactcontrolled input / React Hook Form–
form = this.fb.group({ name: ['', Validators.required], price: [0, Validators.min(0.01)] });
<form [formGroup]="form" (ngSubmit)="save()"> <input formControlName="name"> …
form.valueChanges            // Observable: pipe(debounceTime, switchMap…)
setValue(obj)                // struktur harus lengkap  ·  patchValue(obj) // sebagian

HttpClient

HTTP Interceptor

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<unknown>, next: HttpHandler) {
    const authReq = req.clone({ setHeaders: { Authorization: `Bearer ${token}` } });
    return next.handle(authReq).pipe(catchError(e => { /* 401 → login */ return throwError(() => e); }));
  }
}
providers: [{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }]
AturanKenapa
req.clone(...), jangan ubah reqHttpRequest readonly; retry harus melihat request yang sama
Panggil next.handle(req)teruskan ke interceptor berikutnya; terakhir HttpBackend
multi: truetoken berisi array interceptor; sediakan di injector yang sama dengan HttpClientModule
Urutan = urutan providerrequest A → B, response B → A; tidak bisa diubah setelahnya
Kegunaanheader auth, logging/timing, cache, error global (401), XSRF

Versi fungsi (standalone): HttpInterceptorFn + provideHttpClient(withInterceptors([...])), boleh inject().

Padanan: Axios interceptors.request/response.use (React) · Express middleware next() (backend). Glosarium: HTTP Interceptor, bukan "middleware".

Sumber