Framework Angular

Ejemplo de formulario con Angular

Resumen: en este post te mostraré un ejemplo simple de un formulario con Angular, en donde ligamos a un valor del componente con la vista del formulario.

En Angular existen dos tipos de formularios, los que son formularios reactivos (Reactive form) y los que son basados en plantillas (Template driven forms).

Hoy veremos un ejemplo de un Template driven form en Angular, que si vienes de AngularJS (o apenas estás comenzando) vas a entenderlo muy bien.

Si quieres puedes probar el resultado final aquí, y ver el código de todo el proyecto aquí.

Ejemplo de formulario basado en plantilla con Angular

En app.module.ts debes importar FormsModule, debe quedar algo así:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';// <---- Importar FormsModule

import { AppComponent } from './app.component';
import { FormularioMascotaComponent } from './formulario-mascota/formulario-mascota.component';

@NgModule({
  imports:      [ BrowserModule, /*Importante importar FormsModule -->*/FormsModule ],
  declarations: [ AppComponent, FormularioMascotaComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

En la mayoría de ocasiones ya estará importado, pero puede que no, así que lo indico así.

La clase ligada al formulario

Por buenas prácticas primero vamos a definir una clase de lo que se trate nuestro formulario. En este caso vamos a registrar una mascota, así que la clase queda así:

export class Mascota {
  constructor(
        public nombre: string,
        public raza: string,
        public edad: number
    ) { }
}

Esa clase estará ligada al formulario más tarde. Así que creamos nuestro componente de formulario, si usas la Angular CLI sería:

ng g component formulario-mascota

El componente de TypeScript

Comenzamos viendo la lógica, el componente queda así:

import { Component, OnInit } from "@angular/core";
import { Mascota } from "../mascota";

@Component({
  selector: "app-formulario-mascota",
  templateUrl: "./formulario-mascota.component.html",
  styleUrls: ["./formulario-mascota.component.css"]
})
export class FormularioMascotaComponent implements OnInit {
  // El modelo ligado al formulario, por defecto vacío
  mascotaModel = new Mascota("", "", undefined);

  constructor() {}

  ngOnInit() {}

  formularioEnviado(){
    /*
    Aquí el formulario ha sido enviado, ya sea
    por presionar el botón, presionar Enter, etcétera
    */    console.log("El formulario fue enviado y la mascota es: ", this.mascotaModel)
    alert("Enviado");
  }
}

Importamos la clase Mascota en la línea 2, después creamos una instancia de la clase y la llamamos mascotaModel, por defecto es una clase con datos vacíos.

Después, en la línea 17 definimos una función (formularioEnviado); esta será llamada al enviar el formulario. Presta atención a la misma.

La vista o plantilla del formulario en Angular

Ahora definimos nuestra plantilla. Es tan simple como definir un form y luego colocar dentro varios input o textarea. Además, debemos colocar un botón que envía el formulario, es decir, uno de tipo submit.

Es importante mencionar que el evento por defecto será detenido, es decir, el formulario no se enviará, sino que se llamará al método definido.

<h1>Registrar mascota</h1>
<a href="//parzibyte.me/blog">By Parzibyte</a>
<br><br>
<form #formularioMascota="ngForm" (ngSubmit)="formularioEnviado()">
 <input type="text" name="nombre" placeholder="Nombre de mascota" [(ngModel)]="mascotaModel.nombre">
 <br><br>
 <input type="text" name="raza" placeholder="Raza de mascota" [(ngModel)]="mascotaModel.raza">
 <br><br>
 <input type="number" name="edad" placeholder="Edad de mascota" [(ngModel)]="mascotaModel.edad">
 <br><br>
 <button type="submit">Guardar</button>
</form>

<h2>Depurando mascota:</h2>
{{ mascotaModel | json }}

Comenzamos viendo la línea 4, definimos el form y tenemos el ngSubmit, que invocará a formularioEnviado (la función que definimos con TypeScript)

También tenemos un #formularioMascota indicando con la directiva ngForm, esto no lo usaremos por el momento pero puede que en un futuro sí.

Ahora viene otra cosa importante, cada input debe tener un name, y en ngModel ligamos el modelo con una propiedad del objeto de la clase Mascota.

Poniendo todo junto

Con eso ya tenemos nuestro formulario funcionando. Aquí un ejemplo de cómo se ejecuta:

Enviando un formulario manejado por plantilla usando Angular y TypeScript

Siguientes pasos

Ahora podrías enviar este formulario a un servidor, usando un servicio con el módulo HTTP. Si quieres un ejemplo puedes ver aquí uno con PHP.

No lo olvides… puedes probar el ejemplo aquí, y ver el código aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.