Angular Academy · Lektion

Asynkrone validatorer

Validér asynkront mod serveren.

Lektion 3 af 413 trin

Asynkrone validatorer er en gratis Angular Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Angular Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Angular Academy-kurset indeholder 4 lektioner i alt.

Validering, der venter

Nogle valideringer kræver en server, f.eks. for at kontrollere, om et brugernavn allerede er taget. Asynkrone validatorer returnerer et Promise eller en Observable, som løses til et fejlkort eller null.

Typen AsyncValidatorFn

En asynkron validator tager en kontrol og returnerer Observable<ValidationErrors | null> (eller et Promise).

const v: AsyncValidatorFn = (control) => {
  return checkAvailable(control.value);
};

Når null betyder gyldig

Løs til null, når værdien er gyldig, eller til et fejlobjekt som { taken: true }, når den er ugyldig, præcis som synkrone validatorer.

En validator til brugernavne

Denne validator kalder en tjeneste og omsætter resultatet.

usernameValidator(api: UserApi): AsyncValidatorFn {
  return (control) =>
    api.isTaken(control.value).pipe(
      map(taken => taken ? { taken: true } : null)
    );
}

Registrering af den

Asynkrone validatorer placeres som det tredje argument til en kontrol, adskilt fra synkrone validatorer.

new FormControl('', {
  validators: [Validators.required],
  asyncValidators: [usernameValidator(api)]
});

Tilstanden PENDING

Mens en asynkron validator kører, er kontrolstatussen PENDING. Brug den til at vise en indlæsningsindikator.

@if (form.controls.username.pending) {
  <span>Checking...</span>
}

Debouncing af forespørgsler

Asynkrone validatorer udløses ved hver ændring af værdien. Brug debounce for at undgå at overbelaste serveren.

return timer(300).pipe(
  switchMap(() => api.isTaken(control.value)),
  map(taken => taken ? { taken: true } : null)
);

switchMap annullerer forældede kald

Hvis du bruger switchMap, annulleres den forrige igangværende forespørgsel, når værdien ændres igen, så kun det seneste resultat er relevant.

Strategien updateOn

Indstil updateOn: 'blur', så den asynkrone validering kun kører, når brugeren forlader feltet, og antallet af forespørgsler dermed reduceres.

new FormControl('', {
  asyncValidators: [usernameValidator(api)],
  updateOn: 'blur'
});

Læsning af fejlen

Vis fejlen, når valideringen er færdig, og kontrollen er ændret eller har været fokuseret.

@if (form.controls.username.hasError('taken')) {
  <span>Username already taken</span>
}

Bedste praksis

Brug altid debounce, annullér forældede forespørgsler, vis en indikator for igangværende validering, og håndter netværksfejl, så formularen ikke sidder fast i PENDING.

Hurtigt tjek

Test din forståelse af asynkrone validatorer.

Opsummering

Du har lært, at AsyncValidatorFn returnerer en Observable eller et Promise med ValidationErrors | null, registreres som det tredje kontrolargument og sætter kontrollen i PENDING. Brug debounce og switchMap til at håndtere serverkald.

Gratis at komme i gang

Lær HTML med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
38
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Asynkrone validatorer” gratis?

Ja — alle 3 lektioner i læringssporet Angular Academy, inklusive “Asynkrone validatorer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Angular Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Asynkrone validatorer”?

Validér asynkront mod serveren. Du øver dig i Angular Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Angular Academy?

Der kræves ingen tidligere erfaring. Angular Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Asynkrone validatorer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Angular Academy-lektion?

Ja. Alle Angular Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Typede reaktive formularer
  2. FormArray og dynamiske felter
  3. Asynkrone validatorer
  4. FormBuilder-mønstre
← Tilbage til Angular Academy