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
Página de contacto Angular desde cero
Resumen
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 <hr>.
- 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!