Conoce la importancia de los formularios para tu sitio web

1

¿Por qué aprender Angular Forms?

2

Presentación del proyecto: tour por los formularios de Platzi Store

3

Novedades de Angular 10: cómo migrar proyectos de Angular 8 o 9 a la versión 10

Primeros pasos con Angular Forms

4

Template Forms vs. Reactive Forms

5

Dominando el FormControl y sus estados

6

Cómo usar inputs de texto y la importancia del type

7

Manejo y binding de selects y selects múltiples

8

Manejo y binding de inputs radio y checkbox

9

Aplica validaciones a un FormControl

10

Integración y validaciones con CSS para mostrar errores

Descubre todas las validaciones de Angular Forms

11

Usando FormGroup para agrupar multiples campos

12

Reactive Forms con FormBuilder

13

Los 11 validadores de Angular (y expresiones regulares)

14

Manejando múltiples FormsGroups

15

Usando componentes de Angular Material

16

Errores comunes de usabilidad en formularios

17

Validaciones personalizadas: mejorando nuestro formulario de registro

Implemeta validaciones avanzadas en PlatziStore

18

Cómo hacer validaciones grupales en Angular Forms

19

Validaciones condicionadas y reactividad a variaciones en la UI

20

Proyecto: formulario para crear categorías de productos

21

Proyecto: conectando nuestro formulario y la API

22

Proyecto: subir imágenes a Firebase Storage

23

Validaciones asincrónicas

24

PatchValue: crear vs. editar

25

Proyecto: creando el método de editar categorías

Construye formularios dinámicos conectando una API

26

Smart vs. dumb components: un patrón para dividir responsabilidades

27

Implementando smart y dumb components en PlatziStore

28

Proyecto: mejorando nuestro formulario de productos

29

Select dinámico: carga opciones desde una API

30

Select dinámico: trabajando con objetos

31

¿Cómo crear campos on demand? Forms dinámicos con FormArray

Estrategias avanzadas y optimización de formularios

32

Crea tu propia librería de componentes con CVA o Control Value Accesor

33

Crea un buscador de gifs usando la API de Giphy

34

Optimiza un input de búsquedas con RxJS y debounce

35

Examina la accesibilidad de tus formularios

36

Siguientes pasos en tu carrera de desarrollo web profesional con Angular

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Usando FormGroup para agrupar multiples campos

11/36
Recursos

Aportes 10

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.


	save(event: Event): void {
		this.form.markAllAsTouched()
		if (this.form.invalid) { return }
		console.log(this.form.value)
	}

Esta fue mi solución, si es inválido no imprime en consola y marca como touched el controlador name, de esta manera podemos dar feedback al usuario de que ese campo es requerido.

save(event): void | boolean {
    if (this.form.invalid){
      this.form.controls.name.markAsTouched();
      return false;
    }
    console.log(this.form.value);
  }

Se me ocurrio esta solución:

 <p>
    <button type="submit" [disabled]="form.invalid">Enviar</button>
  </p>

como puedo hacer un getter de un formbuilder que tiene dentro varios formArray anidados.

Se recomienda hacer un curso de escritura rapida, para escribir asi de rapido como el profe.

En lugar de usar FormGroup y por cada campo crear una nueva instancia de FormCrontrol como en el siguiente código:

form = new FormGroup ({
name: new FormContro('', Validators.required)
})

Inyecté FormBuilder y designé los campos que tendría mi formulario, los valores por defecto y los validadores de cada campo :

form;

constructor(private formBuilder: FormBuilder) {}

this.form = this.formBuilder.group({
      nameField: ['', [Validators.required, Validators.maxLength(10)]],
      emailField: ['',Validators.required],
      phoneField: ['',Validators.required],
      colorField: ['#000000',Validators.required],
      ageField: [12,Validators.required],
      dateField: ['', Validators.required],
      categoryField: ['category-1', Validators.required],
      tagsField: ['tag-1', Validators.required],
      agreeField: [false, Validators.required],
      genderField: ['', Validators.required],
      zoneField: ['', Validators.required],
    });

get nameField (){
    return this.form.get('nameField')
  }

   get emailField (){
    return this.form.get('emailField')
  }
   get phoneField (){
    return this.form.get('phoneField')
  }
   get colorField (){
    return this.form.get('colorField')
  }
   get ageField (){
    return this.form.get('ageField')
  }
   get dateField (){
    return this.form.get('dateField')
  }
   get categoryField (){
    return this.form.get('categoryField')
  }
   get tagsField (){
    return this.form.get('tagsField')
  }
   get agreeField (){
    return this.form.get('agreeField')
  }
   get genderField (){
    return this.form.get('genderField')
  }
   get zoneField (){
    return this.form.get('zoneField')
  }

Y para validar que el botón de enviar estuviera habilitado solo cuando se cumplieran las validaciones de cada campo, agregué la siguiente sintaxis al botón submit :

 <button type="submit" [disabled]="form.invalid">Enviar</button>

Si les sale el siguiente error en el formulario, se puede solucionar quitando los atributos de name en los radio inputs

If you define both a name and a formControlName attribute on your radio button, their values must match.

Cual es la diferencia de hacerlo instanciando un new FormGroup y utilizar FormBuilder.group ??

@Nicobyte Sería mala práctica usar [(ngModel)] en los campos para enviar los datos la ts? y al final NO obtener los datos de get.form.value, si no de dicha variable?

Esta fué mi solución:

save(event: any){
    if (this.form.invalid){
      console.error('Formulario Invalido');
    }else{
      console.log(this.form.value);
    }
  }