Página de contacto Angular desde cero
Clase 31 de 80 • Curso de Angular 4
Contenido del curso
Introducción a Angular 4
Setup del Ambiente de Trabajo
Conceptos Básicos
- 9

Para qué nos sirven los Módulos y Componentes
08:10 min - 10

Tipos de Data Binding y String Interpolation
05:05 min - 11

Property Binding
06:04 min - 12

Event Binding
03:04 min - 13

ngModel y two way binding en Angular
05:12 min - 14

Directivas en Angular 4 y ngFor
07:39 min - 15

Cómo usar ngIf en Angular 4.0
03:04 min - 16

Instalando librerías con NPM (Google Maps)
06:48 min
Directivas
Angular UI
Ruteo
- 24

Qué hace el router en Angular 4
03:11 min - 25

Implementación de Rutas en el Proyecto
07:36 min - 26

Href vs router link: navegación angular
02:27 min - 27

Resaltando el link activo con CSS para indicar visualmente en que componente nos encontramos
01:53 min - 28

Parámetros de ruta con routerLink en Angular
06:01 min - 29

Parámetros tipo Query
03:53 min - 30

Creando una vista de detalle para el proyecto
09:06 min - 31

Página de contacto Angular desde cero
Viendo ahora
Servicios
- 32

Servicios en Angular para compartir datos
00:58 min - 33

Creando nuestro propio servicio
07:11 min - 34

Configurando Firebase en nuestro proyecto
05:12 min - 35

Guardando Records en Firebase
12:20 min - 36

Obteniendo records desde Firebase
08:40 min - 37

Obteniendo coordenadas usando Geocoding
13:45 min - 38

Reto: Crear una vista para editar records
09:29 min - 39

Mostrando marcadores en el Mapa de Google
03:02 min
Conexión Remota (Http y Sockets)
Pipes
Animaciones en Angular
Testing en Angular
Autenticación y Protección de Rutas
- 59

Cómo funcionan los JSON Web Tokens
03:05 min - 60

Preparación de vistas para login y registro
11:58 min - 61

Registrando usuarios
07:29 min - 62

Loggeando usuarios
07:18 min - 63

Guardias canActivate en Angular: Proteger rutas con autenticación
11:09 min - 64

Cómo integrar Facebook login con Firebase
09:08 min - 65

Logout en Angular con Firebase
05:28 min
RxJS
- 66

Cómo funciona RxJS con metáfora de oficina
02:09 min - 67

Mostrar email del usuario logueado en Angular
06:32 min - 68

Uso de los Observables
04:30 min - 69

Cómo implementar type ahead con Observables y RxJS
10:43 min - 70

Implementar formularios reactivos con type ahead
07:58 min - 71

Cómo rellenar campos automáticamente con Google
01:28 min
Publicando nuestro proyecto
Fin del curso
Sesiones en vivo
Contenido Bonus
Crear una página de contacto en Angular es directo si reutilizas código, configuras bien el routing y aplicas clases de Bootstrap para un formulario claro. Aquí verás cómo duplicar un componente, ajustar el selector y el template, registrar la ruta contacto, actualizar el menú con routerLink y construir un formulario con campos de nombre, correo y mensaje.
¿Cómo crear la página de contacto en Angular paso a paso?
Duplicar el componente de detalle acelera el avance. Cambia nombres, limpia el TypeScript y apunta el template correcto para mantener la app ordenada.
- Duplica el componente de detalle y renombra el folder a contacto.
- Renombra archivos: contacto.component.ts y contacto.component.html.
- En el TS, cambia nombre del componente y del selector a app-contacto. Usa el template contacto.component.html.
- Elimina imports que ya no se usan para evitar carga innecesaria.
- Mantén el breadcrumb y cambia el texto a “Contacto” para ubicar al usuario.
¿Qué cambios hacer en el componente?
import { Component } from '@angular/core';
@Component({
selector: 'app-contacto',
templateUrl: './contacto.component.html'
})
export class ContactoComponent {}
¿Cómo actualizar el breadcrumb?
<nav>
<a routerLink="/lugares">Lugares</a> / <span>Contacto</span>
</nav>
¿Cómo configurar rutas y menú con routing en Angular?
Para que la página sea accesible, define la ruta contacto en app.module.ts y agrega el componente a declarations. Luego, crea un ítem en el menú que apunte a la nueva ruta y elimina el enlace redundante a detalle (ya se navega desde la lista de lugares).
- En app.module.ts, agrega path "contacto" y component ContactoComponent.
- Importa ContactoComponent y súmalo a declarations.
- En app.component.html, agrega un enlace de menú con routerLink a "/contacto".
- Elimina el enlace “Detalle” si ya no es necesario.
// Ejemplo de rutas
const routes = [
{ path: 'lugares', component: LugaresComponent },
{ path: 'contacto', component: ContactoComponent }
];
<!-- Menú -->
<nav>
<a routerLink="/lugares">Lugares</a>
<a routerLink="/contacto">Contacto</a>
</nav>
¿Cómo construir el formulario con Bootstrap y buenas prácticas?
La idea es ofrecer un formulario simple y usable: nombre, correo y mensaje. Usa la clase de Bootstrap form-control para estilizar campos y botones con btn. El input type="email" mejora la experiencia móvil al mostrar la arroba y el .com en el teclado.
- Campo “Nombre”: label + input type="text" con form-control.
- Campo “Correo”: label + input type="email" con form-control.
- Campo “Mensaje”: textarea con form-control.
- Separador visual con
. - Botón “Enviar” con estilo primario.
- Botón “Cancelar” con routerLink a “/lugares”.
<!-- Formulario de contacto -->
<div class="form-group">
<label>Nombre</label>
<input type="text" class="form-control">
</div>
<div class="form-group">
<label>Correo</label>
<input type="email" class="form-control">
</div>
<div class="form-group">
<label>Mensaje</label>
<textarea class="form-control"></textarea>
</div>
<hr>
<a class="btn btn-primary">Enviar</a>
<a class="btn btn-default" routerLink="/lugares">Cancelar</a>
Además, se sugiere enriquecer la vista: agregar un mapa de Google, una imagen, o dividir el layout en ocho columnas para el formulario y cuatro para una descripción con dirección, teléfono, correo e íconos de Bootstrap. Esto mejora claridad y confianza del usuario.
Finalmente, se anticipa un tema clave: servicios. Si observas, la lista de lugares se repite en detalle.component.ts y lugares.component.ts. Con servicios podrás hacer un refactor para centralizar datos en un solo lugar y evitar duplicación, siguiendo el principio DRY.
¿Tienes mejoras para tu página de contacto? Comparte tu resultado y el código con la comunidad. ¡Nos encantará ver tu implementación!