Crear una vista de detalle clara y útil en Angular es más simple de lo que parece: toma el ID desde la ruta, busca el elemento correcto en tu lista y muestra sus datos con string interpolation. Aquí verás el flujo completo con TypeScript, plantilla HTML y pequeños toques de Bootstrap para una mejor experiencia.
¿Cómo se construye una vista de detalle con Angular y TypeScript?
Para mostrar información específica de un negocio, se parte del ID enviado por la ruta y se trabaja con la lista completa de lugares. Primero, se copia la lista existente desde el componente de lugares y se define un ID inicializado en nulo. En el constructor, se asigna el parámetro de ruta al ID y se crea una función que devuelve el lugar correspondiente. Se valida en consola que el hallazgo sea correcto con console.log.
Se necesita la lista completa de lugares en detalle.component.ts.
Se declara una variable id igual a null.
En el constructor, se asigna el parámetro de ruta al id.
Se crea buscarLugar para hallar el negocio correcto.
Además, el resultado se guarda en una variable de instancia para poder usarla en la plantilla:
lugar:any={};this.lugar=this.buscarLugar();
¿Qué hace filter y cómo obtener un único lugar?
La función filter itera la lista (estilo foreach) y aplica una condición. Aquí, compara el id del lugar con el id de la ruta. Como filter siempre devuelve un arreglo, aunque coincida un solo elemento, se toma el primer elemento con [0] y, si no hay coincidencias, se retorna null con el operador lógico.
Iteración con filter sobre this.lugares.
Función anónima con arrow function para la condición.
Resultado como arreglo: se usa [0] para el primer elemento.
Fallback con || null cuando no hay coincidencias.
¿Cómo usar string interpolation para mostrar datos?
Con los datos en this.lugar, la plantilla HTML se actualiza usando llaves dobles. Se muestra el nombre, la distancia, una descripción y el plan. Se añade estructura con un contenedor y un divisor.
¿Cómo mejorar la interfaz con Bootstrap y un breadcrumb?
Para dar más contexto y navegación, se agrega un breadcrumb simple al inicio con un router link a la lista de lugares. Además, se encapsulan la descripción y el plan dentro de un bloque con la clase "well" de Bootstrap para crear separación visual. Aunque la página aún se ve sencilla, la estructura queda lista para futuros elementos, como un mapa de Google con un marcador del lugar.
Breadcrumb superior: enlace a /lugares y texto del lugar actual.
¿Qué habilidades y conceptos refuerzas en este ejercicio?
A lo largo del proceso se consolidan varias prácticas esenciales para proyectos con Angular y TypeScript: lectura de parámetros, filtrado funcional de datos y presentación con string interpolation. También se introducen patrones de UI simples pero efectivos, como el breadcrumb.
Lectura de parámetros de ruta en el constructor y asignación a id.
Uso de filter con función anónima y arrow function.
Manejo de resultados: arreglo, [0] y || null.
Variable de estado: lugar: any = {} para el detalle.
Presentación con string interpolation en la plantilla.
Mejora visual con Bootstrap y clase "well".
Navegación contextual con router link y breadcrumb.
¿Te gustaría ver validaciones cuando no exista el lugar o integrar el mapa más adelante? Cuéntame qué te gustaría profundizar y en qué parte necesitas apoyo.
Hola Aviloncho!
Los ARIA attributes son para hacer más accesible la web a personas con discapacidades.
En este caso, el aria-label se usa para indicar que el elemento es un breadcrumb, ya que no hay nada en pantalla que indique lo que es ese elemento, caso distinto a cuando tenemos algo así:
¿Es posible utilizar una clase de otro componente?, para no tener que copiar y pegar y códigos que posiblemente ya estés listos como en el caso del minuto 0:37 donde se copio algo que ya estaba en una variable de otro componente
No sería necesario un componente, puedes crear una clase de typescript y llamarla en los componetes que la necesites, en el caso puntual del video es mejor usar un servicio que te devuelva la lista de lugares.
Gracias @jsteven en el caso del servicio si, pero respondiste muy puntual mi preguna, me refería en el caso de cualquier otro ejemplo que no fuera tan práctico colocarlo como servicio. Thank!
hola que tal, una duda.
es posible que en el detalle en uno mismo que es el que se creo en esta clase, pueda mandar diferentes servicios.
claro me refiero a en el servicio crear un nuevo array con valores distintos.
pero trabajando en el mismo constructor de detalle, puedo agregar this.salonBalleza=this.lugaresService.buscarSalonb();
siendo este el segundo this.
intente creando otro constructor pero me marca un error, creo que solo se puede hacer uso de un solo constructor.
de ser posible hacer uso de varios constructores. ¿como seria?
¿como puedo hacer llamado al contenido de el segundo this y no me llame el contenido del primer this ?
Una clase solo puede tener un constructor, lo que puedes hacer es recibir más parámetros en el constructor y hacer una validación dependiendo de esto para llamar a uno u otro.
Buenas noches, dentro del card de arriba, el breadcrumb, por alguna razon el nombre siempre me queda debajo del link de retorno, alguien conoce algun estilo que le pueda inyectar al elemento para que flote justo a su lado? intente los float left y no parece querer funcionar :/
Filter hace lo que su nombre indica filtra un array que cumple con la condición de la función que se pasa por parámetro, en este caso retorna un arreglo con los lugares que el id sea igual al id que llega por parámetro en la url. Como esto retorna un array entonces por eso se extrae el primer elemento del filtro, eso para este caso, si filtraras por ejemplo por el tipo de plan para tener los lugares cuyo plan es gratuito entonces necesitas un listado y no solo uno entonces no usas [0] al final de la sentencia.
me sale nulo al hacer este codigo, yo lo estoy manejando con actividades, pero cuando quise saber por que me estaba trallendo nulo, buse el debugger; para saber y me di cunta, que al ingresar a “this.actividades.filter” se totea. ¿alguna forma de que no se totee el codigo y me salga nulo?
hola buenos días, tengo una duda: se me replica la vista en todos los componentes , osea veo el mapa al cambiar de componente en los links, que debo hacer?
pero lugar.id es numbery this.id es string porque viene de la ruta del url. Así que this.id lo declaro como number y en el constructor le añado el operador unario + a la asignación para convertirlo: