Asynkrone validatorer
Validér asynkront mod serveren.
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.
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
- Typede reaktive formularer
- FormArray og dynamiske felter
- Asynkrone validatorer
- FormBuilder-mønstre