Grensesnittet ControlValueAccessor
Koble en egendefinert komponent til Angular-skjemaer.
Grensesnittet ControlValueAccessor er en gratis leksjon i Angular Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Angular Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Angular Academy inneholder totalt 4 leksjoner.
Hvorfor egendefinerte kontroller
Angular-skjemaer fungerer med native input-felter uten ekstra oppsett. For at din egen komponent (en vurderingswidget, fargevelger eller bryter) skal kunne brukes med ngModel og formControlName, må den implementere ControlValueAccessor.
Broen
ControlValueAccessor (CVA) er broen mellom Angulars skjemamodell og visningen til komponenten din. Den definerer hvordan modellen skriver inn verdier, og hvordan brukerens endringer sendes tilbake.
Grensesnittet
CVA krever fire metoder: writeValue, registerOnChange, registerOnTouched og den valgfrie setDisabledState.
interface ControlValueAccessor {
writeValue(value: any): void;
registerOnChange(fn: (v: any) => void): void;
registerOnTouched(fn: () => void): void;
setDisabledState?(isDisabled: boolean): void;
}Registrere provideren
Fortell Angular at komponenten din er en verditilordner ved å tilby NG_VALUE_ACCESSOR med multi: true og useExisting som peker til komponenten.
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { forwardRef } from '@angular/core';
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RatingComponent),
multi: true
}]Hvorfor forwardRef
forwardRef trengs fordi klassen refererer til seg selv i sine egne metadata før klassen er definert. Den utsetter oppslag av referansen til klassen finnes.
Komponentskjelett
En egendefinert kontroll deklarerer provideren og implementerer grensesnittmetodene. Klassen lagrer den gjeldende verdien internt.
@Component({
selector: 'app-rating',
providers: [/* NG_VALUE_ACCESSOR ... */]
})
export class RatingComponent implements ControlValueAccessor {
value = 0;
// writeValue, registerOnChange, registerOnTouched ...
}Bruke den som en native kontroll
Når CVA er implementert, kan komponenten din brukes i skjemadrevne og reaktive skjemaer akkurat som et native input-felt.
<app-rating formControlName="stars"></app-rating>
<!-- or -->
<app-rating [(ngModel)]="stars"></app-rating>Data i to retninger
Data fra modell til visning går gjennom writeValue (Angular sender skjemaverdien inn). Data fra visning til modell går gjennom callback-funksjonen som registreres i registerOnChange (du sender brukerens endringer ut).
Registrere berøring
Brukeropplevelsen ved skjemavalidering avhenger av tilstanden touched. Du varsler Angular via callback-funksjonen fra registerOnTouched, vanligvis ved blur.
Deaktivert tilstand
Når skjemaet deaktiverer kontrollen (control.disable()), kaller Angular setDisabledState slik at komponenten kan vise dette visuelt og ignorere input.
Veikart
De neste leksjonene implementerer hver del: skrive og registrere verdier, håndtere deaktivert- og berørt-tilstander og legge til validering. Til sammen gir dette en fullt integrert egendefinert kontroll.
Kort sjekk
Sjekk det grunnleggende om CVA.
Oppsummering
Du lærte at ControlValueAccessor kobler egendefinerte komponenter til Angular-skjemaer via fire metoder, registrert gjennom NG_VALUE_ACCESSOR med forwardRef og multi: true. Deretter skal du implementere skriving og registrering av verdier.
Lær deg HTML med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 38
- Leksjoner
- 144
Ofte stilte spørsmål
Er leksjonen «Grensesnittet ControlValueAccessor» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Angular Academy, inkludert «Grensesnittet ControlValueAccessor», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Angular Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Grensesnittet ControlValueAccessor»?
Koble en egendefinert komponent til Angular-skjemaer. Du øver på Angular Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Angular Academy?
Ingen tidligere erfaring er nødvendig. Angular Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Grensesnittet ControlValueAccessor»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Angular Academy-leksjonen?
Ja. Alle Angular Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grensesnittet ControlValueAccessor
- Skrive og registrere verdier
- Håndtere deaktivert- og berørt-tilstander
- Validering i egendefinerte kontroller