Angular: Os validadores de formulário são executados novamente na (re) criação da visualização

Criado em 28 set. 2017  ·  1Comentário  ·  Fonte: angular/angular

Estou enviando um ...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Comportamento atual

Quando a diretiva associada a um controle de formulário é criada na visualização, os validadores são acionados.

Comportamento esperado

Os validadores não devem modelo .

Reprodução mínima do problema com instruções

https://stackblitz.com/edit/angular-reactive-forms-issue?file=app/app.component.ts

  1. Abra o console.
  2. Use o botão _Toggle visiblity_ para confirmar se os validadores estão sendo executados em cada criação de diretiva de controle.

Qual é a motivação / caso de uso para mudar o comportamento?

  1. Continue a partir das etapas acima.
  2. Pressione _set erros manualmente_ para inserir um erro manualmente (isto é uma simulação de configuração manual de um erro após a validação ser retornada do backend)
  3. Pressione _Toggle visiblity_ para fazê-lo desaparecer. Nada acontece no console.
  4. Pressione-o novamente para fazer o controle aparecer. Observe os logs do console, o que significa que os validadores estão em execução.

Observe o fato de que a mensagem de erro agora se foi . Alternar a visualização está zombando do caso de uso de ter um formulário de várias partes.


Se for intencional, não vejo uma razão para isso. Estamos criando uma visão onde escrevemos o modelo de formulário de dados para ver. A ação de leitura do modelo não deve acionar validadores, tanto quanto eu entendo. A meu ver, os validadores devem ser executados quando as instâncias FormControl são criadas no modelo. _Por que os validadores são acionados quando o valor não mudou? _

Meio Ambiente

<br i="34"/>
Angular version: 4.3.6<br i="35"/>
<!-- Check whether this is still an issue in the most recent Angular version -->
P4 forms validators medium confirmed triage #1 bufix

Comentários muito úteis

Sim, parece certo.
Uma alteração na visualização não deve afetar o modelo em formas reativas e nenhuma alteração no modelo não deve acionar a validação.

Eu o apontei para https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Está sempre executando uma nova execução de validação ( updateValueAndValidity() ), embora só deva fazer isso se houver novos validadores introduzidos pela diretiva de controle.

Além disso, renomear a função para addControlDirective() pode reduzir a confusão sobre o que ela está fazendo.

Pode estar de alguma forma relacionado a # 14376, pois é tanto sobre a edição da visualização em uma forma reativa quanto parece que FormGroupDirective é o culpado.

>Todos os comentários

Sim, parece certo.
Uma alteração na visualização não deve afetar o modelo em formas reativas e nenhuma alteração no modelo não deve acionar a validação.

Eu o apontei para https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Está sempre executando uma nova execução de validação ( updateValueAndValidity() ), embora só deva fazer isso se houver novos validadores introduzidos pela diretiva de controle.

Além disso, renomear a função para addControlDirective() pode reduzir a confusão sobre o que ela está fazendo.

Pode estar de alguma forma relacionado a # 14376, pois é tanto sobre a edição da visualização em uma forma reativa quanto parece que FormGroupDirective é o culpado.

Esta página foi útil?
0 / 5 - 0 avaliações