Angular: Los validadores de formularios se vuelven a ejecutar en la vista (re) creación

Creado en 28 sept. 2017  ·  1Comentario  ·  Fuente: angular/angular

Estoy enviando un ...


[ ] 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

Comportamiento actual

Cuando se crea la directiva asociada con un control de formulario en la vista, se activan los validadores.

Comportamiento esperado

Los validadores no deben activarse cuando cambia la vista . Las formas reactivas no deben estar vinculadas a la forma en que se representan en la vista. Su fuente de verdad debería ser el modelo .

Reproducción mínima del problema con instrucciones.

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

  1. Consola abierta.
  2. Utilice el botón _Toggle visiblity_ para confirmar que los validadores se estén ejecutando en cada creación de directiva de control.

¿Cuál es la motivación / caso de uso para cambiar el comportamiento?

  1. Continúe con los pasos anteriores.
  2. Presione _configurar errores manualmente_ para insertar un error manualmente (esto es una burla de configurar manualmente un error después de que se devuelve la validación desde el backend)
  3. Pulsa _Toggle visiblity_ para que desaparezca. No pasa nada en la consola.
  4. Presiónelo de nuevo para que aparezca el control. Observe que la consola registra, lo que significa que los validadores se están ejecutando.

Observe el hecho de que el mensaje de error ha desaparecido . Alternar la vista es burlarse del caso de uso de tener una forma de múltiples partes.


Si esto es por diseño, no veo una razón para ello. Estamos creando una vista donde escribimos el modelo de formulario de datos para ver. La acción de leer desde el modelo no debería activar validadores, hasta donde yo entiendo. Como lo veo, los validadores deben ejecutarse cuando se crean las instancias FormControl en el modelo. _¿Por qué se activan los validadores cuando el valor no cambió? _

Medio 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

Comentario más útil

Sí suena bien.
Un cambio en la vista no debería afectar el modelo en formas reactivas y ningún cambio en el modelo no debería activar la validación.

Lo señalé con alfiler a https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Siempre está ejecutando una nueva ejecución de validación ( updateValueAndValidity() ), mientras que solo debería hacerlo si la directiva de control introdujo nuevos validadores.

También cambiar el nombre de la función a addControlDirective() puede reducir la confusión sobre lo que está haciendo.

Puede estar relacionado de alguna manera con # 14376, ya que se trata de editar la vista en un formulario reactivo y parece que FormGroupDirective tiene la culpa.

>Todos los comentarios

Sí suena bien.
Un cambio en la vista no debería afectar el modelo en formas reactivas y ningún cambio en el modelo no debería activar la validación.

Lo señalé con alfiler a https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Siempre está ejecutando una nueva ejecución de validación ( updateValueAndValidity() ), mientras que solo debería hacerlo si la directiva de control introdujo nuevos validadores.

También cambiar el nombre de la función a addControlDirective() puede reducir la confusión sobre lo que está haciendo.

Puede estar relacionado de alguna manera con # 14376, ya que se trata de editar la vista en un formulario reactivo y parece que FormGroupDirective tiene la culpa.

¿Fue útil esta página
0 / 5 - 0 calificaciones