Hasta ahora solo tenemos una vista en nuestra pequeña aplicación Angular. Por supuesto, vamos a querer tener más opciones para que el usuario visite diferentes vistas para obtener información y experiencias diferentes. Al igual que tenemos enlaces en páginas web básicas, también podemos configurar enlaces en una aplicación Angular para navegar a varias vistas. Es a través de la funcionalidad de enrutamiento proporcionada en Angular que podemos configurar varias rutas a varios conjuntos de información. En este tutorial, aprenderemos cómo funciona el enrutamiento, cómo configurar rutas, cómo vincular rutas a acciones y cómo construir las distintas vistas que necesitaremos.


Crear un nuevo componente

En este momento, hay un componente de lista de juegos simple que muestra una lista de todos los juegos en la aplicación. Ahora, queremos construir un nuevo componente que muestre los detalles de un juego a la vez. Querremos poder hacer clic en un enlace y que funcione el enrutamiento angular para que se nos envíe a una vista detallada de ese juego. En otras palabras, necesitamos un nuevo componente para poder dirigirnos a ese componente. Así es como se verá el componente de detalles del juego.
componente de detalle del juego angular

El componente de detalles del juego consta de game-detail.css, game-detail.component.html y game-detail.component.ts. Viven en la gamescarpeta. Aquí están esos archivos.


game-detail.css


game-detail.component.html


game-detail.component.ts


Cómo funciona el enrutamiento angular

Todas las vistas se muestran dentro de una página en una aplicación angular. Esto es lo que se conoce como aplicación de página única o SPA . La página donde se muestran todas las vistas suele ser el archivo index.html . El nuestro se ve así.

Se puede mostrar cualquier número de páginas o vistas en la página de índice en cualquier momento. Puede tener tres vistas o cientos. Cualquiera de ellos podría configurarse para mostrarse en el archivo index.html. ¿Como sucedió esto? Esto sucede usando Routing In Angular. Para configurar el enrutamiento en Angular, puede seguir estos pasos.

  • Configurar una ruta para cada componente
  • Definir las opciones o acciones para el usuario.
  • Vincular una ruta a una opción o acción
  • Activar la ruta según la acción del usuario (clics)
  • Cuando se activa una ruta, se muestra la vista de componentes

En la captura de pantalla siguiente hay un menú de muestra que proporciona las opciones a un usuario de la aplicación. Una ruta está vinculada a la opción del menú (los enlaces) para que Angular pueda enrutar a un determinado componente. Esto se logra con la directiva de enrutador incorporado de routerLinkCuando el usuario hace clic en la opción Juegos, y el enrutador angular navega a la ruta / juegos. Esto actualiza la URL del navegador y carga el componente deseado en la vista.
routerlink en angular

Por lo tanto, cuando el usuario visita http: // localhost: 4200 / games en la barra de direcciones, ve la lista de juegos.
navegación de menú angular


Configurar rutas

Veamos cómo configurar realmente algunas rutas en Angular. El enrutamiento se basa en componentes y, por lo tanto, el flujo de trabajo debe determinar primero qué componente (s) le gustaría tener como destino de enrutamiento. Luego, puede definir la (s) ruta (s) según sea necesario. Primero, necesitaremos un componente de página de inicio, ya que ahora se mostrará de forma predeterminada en lugar de la lista de juegos. Este componente vive en una homecarpeta y consta de homepage.component.html y homepage.component.ts.


homepage.component.html


homepage.component.ts

En el archivo app.module.ts , ahora podemos especificar este componente como la ruta predeterminada, por así decirlo, usando RouterModule.forRoot().

Es en el archivo app.component.ts donde podemos configurar las opciones de routerLink para el usuario. De hecho, usaremos la routerLinkActivedirectiva para que cuando un usuario navegue a una ruta específica, ese botón o enlace aparezca resaltado. También tenga en cuenta el uso del elemento especial de salida del enrutador, que es un marcador de posición que Angular llena dinámicamente en función del estado actual del enrutador. En otras palabras, cada vez que se activa una ruta, la vista asociada con esa ruta se carga en la etiqueta <router-outlet> </router-outlet> para su visualización.

Pasar parámetros a una ruta

Para enrutar a elementos específicos de una colección, puede pasar parámetros a una ruta. Por ejemplo, todos los juegos de nuestra aplicación tienen una identificación asociada. Para dirigirnos a un juego específico, necesitaríamos especificar de alguna manera la identificación del juego en la ruta. Por ejemplo, visitar la ruta http: // localhost: 4200 / games / 5 muestra un juego específico.
ejemplo de parámetro de ruta angular


game-list.component.html

En nuestro componente de lista de juegos, donde enumeramos todos los juegos, podemos configurar el paso de parámetros de ruta como se ve con el código resaltado a continuación.


Definir rutas con parámetros

Ok, los enlaces están en el lugar indicado arriba usando el enlace en el formato de <a [routerLink]="['/games', game.gameId]”>. Tenga en cuenta que la ruta es / games y después de la coma pasamos el id del juego que queremos ver. Para que esto funcione, las rutas deben definirse en algún lugar de la aplicación. Para estos enlaces, podemos definir las rutas en el game.module.tsarchivo usando RouterModule.forChild () .

El archivo game-detail.component.ts también debe conocer la ruta. Para mostrar el juego correcto, el componente de detalles del juego lee el parámetro de la URL. Luego, ese parámetro se usa para buscar el juego correcto de la API de back-end que habíamos configurado en un tutorial anterior. Para obtener el parámetro de la URL, se utiliza el servicio ActivatedRoute . Esto se configura como una dependencia en el constructor.

¡Probar las rutas detalladas del juego en el navegador está funcionando bastante bien!


Activar rutas con código

Es posible que haya notado el botón Atrás que nos lleva de regreso a la vista de componentes de la lista de juegos. Esta ruta se activa mediante una función dedicada y la proporciona el servicio de enrutador. Aquí tenemos el archivo game-detail.component.ts listo para este tipo de enrutamiento.

Ahora, en el archivo game-detail.component.html , podemos simplemente llamar onBack()cuando el usuario hace clic para activar el código de navegación de enrutamiento.


Proteja una ruta con guardias

Los diferentes usuarios de la aplicación pueden tener diferentes niveles de permisos. Quizás solo los usuarios registrados deberían poder visitar una ruta específica. En un caso como este, puede utilizar guardias en angular para proteger una ruta determinada. El enrutador angular le proporciona estas protecciones. Incluyen las siguientes opciones.

  • CanActivate - navegación de guardia a una ruta
  • CanDeactivate : protege la navegación de una ruta
  • Resolver : recuperar datos antes de la activación de la ruta
  • CanLoad : evita el enrutamiento asíncrono

Para nuestros propósitos, podemos construir una guardia que solo permitirá al usuario ver el componente de detalles del juego si se proporciona un parámetro de ruta válido en la URL. Podemos empezar con game.module.ts así.

En el fragmento de arriba, estamos diciendo que, antes de que un usuario pueda navegar al componente de detalles del juego, GameDetailGuard debe permitir el acceso. Ahora, necesitaremos crear la guardia en sí y tendrá las reglas necesarias. Haremos cumplir que la identificación no puede ser 0 o NaN. Aquí está el game-detail.guard.ts . La lógica que nos interesa está resaltada, mientras que el otro código es un modelo estándar angular.


Resumen del ejemplo de enrutamiento angular

Pasar parámetros
Se puede pasar cualquier número de parámetros a una ruta en angular, separados por barras. Por ejemplo, aquí hay una definición de ruta.

El parámetro se puede pasar completando la matriz de parámetros de enlace vinculada a la directiva routerLink.

En el archivo de componentes, puede leer el valor del parámetro utilizando el servicio ActivatedRoute.

Ruta con código
Para activar una ruta con código, asegúrese de seguir estos pasos.

  • Utilice el servicio de enrutador
  • Asegúrese de importar el servicio y definirlo como una dependencia del constructor
  • Agregar un método que llame al método de navegación de la instancia del servicio de enrutador
  • Pase la matriz de parámetros de enlace
  • Agregar un elemento de interfaz de usuario
  • Aprovecha el enlace de eventos para enlazar con el método creado
  • Proteja una ruta con un guardia
    Evite o permita el acceso como mejor le parezca utilizando la función de guardia proporcionada por angular. Para configurar un guardia, siga estos pasos.

  • Construye un servicio de guardia
  • Implementar el tipo de guardia (CanActivate, CanDeactivate, Resolve o CanLoad)
  • Cree el método necesario (uno de los anteriores)
  • Registrar el proveedor de servicios de guardia (proporcionado en)
  • Agregue el guardia a la ruta deseada
  • En este tutorial, echamos un vistazo a varias técnicas de enrutamiento disponibles en Angular. Los conceptos básicos con los que ahora deberíamos estar familiarizados son cómo pasar parámetros a una ruta en angular, cómo activar una ruta con código y cómo proteger una ruta con un guardia. El enrutamiento es un tema complicado en Angular y hay muchas más cosas que aprender, como parámetros obligatorios, opcionales y de consulta, resolución de rutas, salidas de enrutadores secundarios y carga diferida.