Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 830|Svar: 0

[Kantig] Angular 18 Series (32) ControlValueAccessor anpassade formulärkontroller

[Kopiera länk]
Publicerad den 2025-4-30 16:00:55 | | | |
Krav: I daglig front-end-utveckling används formulär ofta för att lägga till och redigera data via formulär. En instans av en FormGroup kan spåra en uppsättning FormControl-instanser, och när en FormGroup skapas kan varje kontroll i den spåras efter sitt namn. Hur anpassar jag en formulärkontroll?

Låt oss först titta på renderingarna:



Stegen är följande:

  • Ärver ControlValueAccessor-gränssnittet
  • Registrera dig hos en NG_VALUE_ACCESSOR leverantör


Ärver ControlValueAccessor-gränssnittet

ControlValueAccessor-gränssnittet definierar 4 metoder, enligt följande:

  • writeValue: Varje värdeåtgärd som explicit anropar FormControl API kommer att anropa writeValue()-metoden för den anpassade formkontrollen och skicka in det nya värdet som en parameter. Det den gör är att sätta värdet på den inbyggda formulärkontrollen. Dataflödet kommer från Angular form -> Native form (anpassad kontroll).
  • registerOnChange: registrerar onChange-händelsen, som anropas vid initialisering och är en händelseutlösarfunktion. Vad är syftet med denna händelseutlösare? Vi måste först spara event trigger-funktionen i registerOnChange och anropa den när tiden är rätt (till exempel när kontrollen tar emot användarinput och behöver svara). Du kan förstå denna funktion som "ett API som anroparen använder för att meddela kontrollen när det sker en förändring i formulärdatan i kontrollen", det vill säga för att synkronisera informationen i kontrollen. Parametern för denna händelsefunktion är värdet som vinkelformen ska få. Dataflöde från Native form (anpassad kontroll) -> Angular form.
  • registerOnTouched: Registrerar onTouched-händelsen, som är en återanropsfunktion som aktiveras när en användare interagerar med en kontroll. Denna funktion används för att meddela formulärkontrollen att den redan är rörd för att uppdatera det interna tillståndet för den bundna FormContorl. Dataflöde från Native form (anpassad kontroll) -> Angular form.
  • setDisabledState: När formulärtillståndet ändras till eller från DISABLED anropar formulär-API:et metoden setDisabledState() för att aktivera eller inaktivera motsvarande DOM-element. Dataflödet kommer från Angular form -> Native form (anpassad kontroll).


Interaktionen visas nedan:



Faktum är att inbyggda formulärkontroller också har gränssnitt liknande ControlValueAccessor, till exempel när Angular stöter på inmatnings- eller textområdes-DOM-kontroller i komponentmallar, använder det kommandot DefaultValueAccessor.

Accessor
Formelement
DefaultValueAccessor
Inmatning, textområde
CheckboxControlValueAccessor
input[type=checkruta]
NumberValueAccessor
input[type=number]
RadioControlValueAccessor
input[type=radio]
RangeValueAccessor
input[type=range]
SelectControlValueAccessor
utvald
SelectMultipleControlValueAccessor
select[multiple]


Ovanstående är Angular-formulärkontrollen som Angular skapade för alla inbyggda DOM-formelement, nämligen den inbyggda ControlValueAccessor.

Dokumentation:Inloggningen med hyperlänken är synlig.

Registrera dig hos en NG_VALUE_ACCESSOR leverantör

Efter att ha implementerat gränssnittet ControlValueAccessor behöver vi också registrera det som en NG_VALUE_ACCESSOR, så att den anpassade formulärkontrollen kan kännas igen och integreras av Angular, annars får den ett felmeddelande "RuntimeError: NG01203: No value accessor for form control name: 'xxx'".

Dokumentation:Inloggningen med hyperlänken är synlig.

koda

Enligt stegen är hela kodningsarbetet, effekten är den initiala renderingen, koden är följande.

HTML-sida:

TS-kod:
Hänvisning:

Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.




Föregående:En kort introduktion till Reproducerbar Build
Nästa:Den maximala varchar-längden som SQL Server skapar för icke-klustrade index
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com