Aplicación Angular de profesores con componentes compartidos

Clase 12 de 17Curso de Monorepositorios con NX

Resumen

Aprende cómo la visión de profesores en Angular coordina dos aplicaciones con componentes compartidos, un backend común y arranque ágil con Nx Console y Nx Cloud. Aquí verás cómo un cambio en servicios, modelos o UI repercute en ambas apps al mismo tiempo, optimizando trabajo y evitando duplicación de código.

¿Cómo se organiza la aplicación de profesores en Angular y Nx?

La segunda app se encuentra en packages, app dos, y muestra un panel de profesores con navegación entre dos rutas: gestión de cursos e inscripciones por curso. Actúa como pivote con el Note JS Server, compartiendo recursos con la primera app.

  • Rutas clave: gestión de cursos e inscripciones por curso.
  • Componentes compartidos: tabla de inscripciones, tarjeta del curso y botón cuando corresponde.
  • Carpeta UI compartida: UI shared centraliza tarjeta, tabla y estilos comunes.
  • Lógica en TS: cada vista tiene su controlador, con modelos como curso y un Api Service ya usado en la app uno.
  • Imports en Angular diecisiete: componentes se importan directamente en cada vista.
  • Linting: el constructor puede mostrar errores que se corrigen luego.

¿Qué componentes se reutilizan entre apps?

  • Tabla compartida: listados y, según el caso, acciones del CRUD.
  • Tarjeta de curso: misma presentación en ambas apps.
  • Botón: solo donde la lógica de negocio lo necesita.

¿Cómo ayuda el modelo y el Api Service?

  • Modelo curso: tipa datos y uniforma el intercambio.
  • Api Service: centraliza llamadas al backend, evitando duplicaciones.

¿Qué flujo cubre el CRUD de cursos y cómo validarlo?

La gestión de cursos usa un formulario reactivo: el botón de crear permanece deshabilitado si no se cumplen las condiciones. La tabla compartida ofrece el CRUD completo.

  • Create: crear un curso desde el formulario.
  • Read: visualizar cursos existentes en tabla y tarjetas.
  • Update: editar desde acciones de la tabla.
  • Delete: eliminar registros cuando sea necesario.

Importante: en la pantalla de profesores no hay botón de inscripción en las tarjetas, porque no corresponde a su lógica de negocio.

¿Cómo se ven las inscripciones por curso?

  • Un select permite elegir el curso y ver sus inscripciones.
  • Una tarjeta general y una tabla sin acciones muestran la información relevante.

¿Qué datos prácticos se mencionan?

  • Validación: el botón crear se habilita solo si el formulario es válido.
  • Flujo completo: crear, ver, editar y eliminar en una misma vista.

¿Cómo sincroniza todo con el mismo backend y qué herramientas aceleran?

Se arranca el server con Nx Console y se espera a que esté en localhost 3000. Luego se abren la app uno en 4200 y la app dos en 4201. La velocidad mejora gracias a la caché de Nx Cloud, que guarda resultados en memoria.

  • Puertos: 3000 para backend, 4200 para app uno, 4201 para app dos.
  • Rendimiento: Nx Cloud acelera el ciclo de desarrollo con caché.
  • Pivote: ambas apps consultan el mismo backend, sincronizando cambios.

¿Qué demuestra el ejemplo de “Angular con Firebase”?

  • Se crea un curso “Angular con Firebase” y aparece la nueva tarjeta.
  • Desde la app uno, un usuario puede inscribirse.
  • En la app dos, en inscripciones por curso, se ve “Alice Cooper” recién inscripta.
  • Conclusión operativa: lo que ocurre en una pantalla impacta en la otra por compartir el mismo backend.

¿Qué pasa al modificar componentes compartidos?

  • Se cambia el color de la etiqueta de profesores en el CSS de la tarjeta en UI shared (clase course teacher).
  • El cambio se refleja de inmediato en ambas aplicaciones.
  • Valor: una sola modificación afecta múltiples proyectos, ahorrando tiempo y código.

¿Qué decisiones de negocio son solo educativas?

  • Selector de usuario actual expuesto para simplificar pruebas: en producción habría login.
  • Modificaciones abiertas a cualquiera: en la vida real habría restricciones y permisos.

¿Te gustaría ver otras mejoras en componentes compartidos o flujos de validación? Cuéntalo en los comentarios y propón qué optimizar a continuación.