Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 830|Resposta: 0

[Angular] Angular 18 Series (32) ControlValueAccessor controles personalizados de forma

[Copiar link]
Postado em 30-04-2025 16:00:55 | | | |
Requisitos: No desenvolvimento diário da front-end, formulários são frequentemente usados para adicionar e editar dados através de formulários. Uma instância de um FormGroup pode rastrear um conjunto de instâncias do FormControl, e quando um FormGroup é criado, cada controle nele pode ser rastreado pelo nome. Como personalizo um controle de formulário?

Vamos dar uma olhada nas renderizações primeiro:



Os passos são os seguintes:

  • Herda a interface ControlValueAccessor
  • Registre-se em um provedor NG_VALUE_ACCESSOR


Herda a interface ControlValueAccessor

A interface ControlValueAccessor define 4 métodos, da seguinte forma:

  • writeValue: Qualquer ação de valor que chame explicitamente a API do FormControl chamará o método writeValue() do controle de formulário personalizado e passará o novo valor como parâmetro. O que ele faz é definir o valor do controle nativo da forma. O fluxo de dados é da forma angular -> da forma nativa (controle personalizado).
  • registerOnChange: registra o evento onChange, que é chamado na inicialização e é uma função de disparo de evento. Qual é a utilidade dessa função de gatilho de eventos? Primeiro, precisamos salvar a função de gatilho de evento no registerOnChange e chamá-la quando for o momento certo (por exemplo, quando o controle recebe a entrada do usuário e precisa responder). Você pode entender essa função como "uma API usada pelo chamador para notificar o controle quando há uma mudança nos dados de forma no controle", ou seja, para sincronizar as informações no controle. O parâmetro dessa função de evento é o valor que a forma angular deve receber. Fluxo de dados do formulário nativo (controle personalizado) - > forma angular.
  • registerOnTouched: Registra o evento onTouched, que é uma função de callback que é acionada quando o usuário interage com um controle. Essa função é usada para notificar o controle de forma que ele já está sendo tocado para atualizar o estado interno do FormContorl vinculado. Fluxo de dados do formulário nativo (controle personalizado) - > forma angular.
  • setDisabledState: Quando o estado do formulário muda para ou de DISABLED, a API do formulário chama o método setDisabledState() para habilitar ou desativar o elemento DOM correspondente. O fluxo de dados é da forma angular -> da forma nativa (controle personalizado).


A interação é mostrada abaixo:



Na verdade, controles nativos de formulário também possuem interfaces semelhantes ao ControlValueAccessor; por exemplo, quando o Angular encontra controles nativos de entrada ou de área de texto DOM em templates de componentes, ele usará o comando DefaultValueAccessor.

Acessor
Elemento de Forma
DefaultValueAccessor
entrada, área de texto
CheckboxControlValueAccessor
entrada[tipo=caixa de seleção]
NumberValueAccessor
entrada[tipo=número]
RadioControleAcessórioValor
entrada[tipo=rádio]
RangeValueAccessor
entrada[tipo=alcance]
SelectControlControlValueAccessor
selecionar
SelecionarMúltiplosControleValorAcessor
selecionar[múltiplos]


O acima é o controle de forma angular que o Angular criou para todos os elementos nativos da forma DOM, ou seja, o ControlValueAccess embutido.

Documentação:O login do hiperlink está visível.

Registre-se em um provedor NG_VALUE_ACCESSOR

Após implementar a interface ControlValueAccessor, também precisamos registrá-la como um NG_VALUE_ACCESSOR, para que o controle personalizado do formulário possa ser reconhecido e integrado pelo Angular, caso contrário, receberá o erro "RuntimeError: NG01203: No value accessor para o nome do controle do formulário: 'xxx'".

Documentação:O login do hiperlink está visível.

codificar

De acordo com as etapas, o trabalho completo de codificação, o efeito é a renderização inicial, o código é o seguinte.

Página HTML:

Código TS:
Referência:

O login do hiperlink está visível.
O login do hiperlink está visível.




Anterior:Uma breve introdução ao Reproducible Build
Próximo:O comprimento máximo de varchar que o SQL Server cria para índices não clusterizados
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com