Miguel Angeles
Me quedo así.
Jhossept Romero
Te quedo muy cool Felicidades
Jhonatan Steven Yepes
Muy buen diseño
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.
¿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).
// 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.
<!-- 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!
Miguel Angeles
Me quedo así.
Jhossept Romero
Te quedo muy cool Felicidades
Jhonatan Steven Yepes
Muy buen diseño
Pablo José
Creo que este es mi avance… mmm no es mucho pero sigo practicando, Saludos n.n
Pablo José
Y el código 😃
Yesica Lizeth Cortés Pineda
Está muy bien, gracias por tu aporte.
Jonathan Jiménez
Eduardo de la Cruz Ibarra
ProfesorMe gustó mucho que pusieras esos elementos a la derecha!
Alejandro Estupiñan
Me puedes pasar el codigo?
bueno a mi intento me quedo asi
Robert Camilo Rodriguez Cabra
Este fue mi avance.
Robert Camilo Rodriguez Cabra
Jesús Enrique Rojas
Así me quedo a mi
Pedro Ramón Sánchez Chacón
Felicidades amigo, esta espectacular.
Jesús Enrique Rojas
Muchas gracias @VengadorWeb
Nelson Celis
Company_adminSantiago Diaz
Muchas gracias!. Me ayudó mucho tu código.
Saludos
Marla Carolina Prieto Pelayo
Mil gracias por compartir tus conocimientos, me fueron de gran ayuda <3
Yeison Montoya
Me gusta como quedó.
Usuario anónimo
UserHola compañeros, pues les comparto como va mi proyecto en local:
IDE:
Carlos Pedroza
Camilo Andres Navarrete Ruiz
Buenas tardes, este es mi progreso, gracias.
Yesica Lizeth Cortés Pineda
Muy bien, muchas gracias por tu aporte, cómo te ha parecido el curso?
Leonardo Araoz
Wilson Marino Pablo Mendez
Solo comparto!
Azlain Saavedra
Para crear de manera rapida los componentes podemos apoyarnos en angular cli desde la consola:
ng g component contacto
esto aplica para crear directivas, servicios y otros tantos dejo aqui la info
Azlain Saavedra
aqui
Rodrigo Sebastian Salinas Leiva
Algo modesto pero que me alegra hacerlo con estas nuevas tecnologías.
Yesica Lizeth Cortés Pineda
Yo tenia la idea de que Angular era un framework suuuuuuper complejo, pero con este curso me di cuenta que no es así, y permite hacer cosas muy interesantes muy fácilmente.
Isaí Ramírez
Leyendo un poco más de bootstrap hice esto
Felipe de Jesús Víctor Arceo
Yarilenis Yurimar Laverde Tejada
Mi comienzo
Erika Alejandra Garcia
Después del Reto: 😉
Andres Alvarez
me quedo asi
<div class="contact-us container-fluid"> <div class="txt-contact row"> <div class="txt-form col-4 offset-1" > <label>Nombre</label> <input type="text" class="form-control" /> <br /> <label>Correo</label> <input type="email" class="form-control" /> <br /> <label>Mensaje</label> <textarea class="form-control"></textarea> <hr /> <button type="button" class="btn btn-outline-info">Enviar</button> </div> <div class="map col-4 offset-1"> <img src="assets/icono-mail-1.png" > </div> </div> </div>
Hola!! Comparto como me quedó!!
En contacto.component.html
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css" integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz" crossorigin="anonymous"> <div id="fondo"> <div class="card opacity"> <div class="d-flex flex-row"> <div class="p-2"><a routerLink="/lugares">Lugares</a></div> <div class="p-2">/ Contacto</div> </div> </div> <div class="container"> <div class="row"> <div class="col-md-4 offset-md-1 opacity esp"> <h2 class="d-flex justify-content-center">¡Escríbanos!</h2> <label>Nombre</label> <input type="text" class="form-control"> <br> <label>Correo</label> <input type="email" class="form-control"> <br> <label>Mensaje</label> <textarea class="form-control"></textarea> <hr> <div class="d-flex justify-content-center"> <a class="btn btn-primary">Enviar</a> <a class="btn btn-secondary">Cancelar</a> </div> </div> <div class="col-md-4 offset-md-2 opacity esp"> <p class="d-flex justify-content-center"><i class="fas fa-globe fa-4x"></i></p> <h2 class="d-flex justify-content-center">Contacto</h2> <p class="d-flex justify-content-center">Nelson Celis</p> <p class="d-flex justify-content-center">Ingeniero en Automatización</p> <p class="d-flex justify-content-center"><i class="fas fa-phone"><span> +56 9 8878 5755</span></i></p> <p class="d-flex justify-content-center"><i class="fas fa-map-marker-alt"><span> Santiago, Chile</span></i></p> </div> </div> </div> </div>
En contacto.component.css
#fondo{ background-image: url(../../images/fondo.jpg); background-position: 50% 50%; background-size:cover; height: 100vh; font-family: Arial; } .opacity{ background-color:rgb(240,248,255,0.7); } .esp{ margin-top: 20px; padding: 20px; } .btn{ margin: 5px; } span{ font-family: Arial; font-weight: normal; }
contacto.component.html
<ng-container appBodyBackground> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/lugares">Lugares</a></li> <li class="breadcrumb-item">Contacto</li> </ol> </nav> <div class="container rounded"> <div class="row"> <div class="col-md-8"> <p><img src="../../../assets/logo-platzisquare.png" class="img-fluid mx-auto d-block mt-5" alt="Logo de PlatziSquare!"></p> </div> <div class="col-md-4"> <label class="font-weight-bold" for="nombre">Me llamo:</label> <input type="text" class="form-control" id="nombre"> <label class="font-weight-bold" for="correo">Mi correo electrónico es:</label> <input type="email" class="form-control" id="correo"> <label class="font-weight-bold" for="mensaje">Mensaje para PlatziSquare!:</label> <textarea name="mensaje" class="form-control" id="mensaje" rows="4"></textarea> <hr> <button class="btn btn-primary" >Enviar</button> <button routerLink="/lugares" class="btn btn-light ml-1">Cancelar</button> <hr> <div class="card"> <agm-map [latitude]="20.6737883" [longitude]="-103.3704326" [zoom]="12"> <agm-marker [latitude]="20.6737883" [longitude]="-103.3704326"></agm-marker> </agm-map> <div class="card-body"> <h5 class="card-title">Visitanos en:</h5> <p class="card-text"> Av. Importante #1234, Piso 9, int. 63 <br> Cuidad, Estado<br> </p> </div> <div class="card-footer"> <small class="text-muted"> <img src="../../assets/icons/baseline_call_black_18dp.png" alt="Número telefónico de PlatziSquare"> (12) 1234-5678 <br> <img src="../../assets/icons/baseline_email_black_18dp.png" alt="Email de PlatziSquare"> contacto@platzisquare.com </small> </div> </div> <p></p> </div> </div> </div> </ng-container>
body-background.directive.ts
import { Directive, AfterViewInit, OnDestroy } from '@angular/core'; @Directive({ selector: '[appBodyBackground]' }) export class BodyBackgroundDirective implements AfterViewInit, OnDestroy{ bodyElement: HTMLBodyElement; constructor() { this.bodyElement = document.getElementsByTagName('body')[0]; } ngAfterViewInit() { this.bodyElement.classList.add('body-bg'); } ngOnDestroy() { this.bodyElement.classList.remove('body-bg'); } }