TL;RD; Quiero enrutar a una página con parámetros sin que la URL indique datos subyacentes.
tengo 2 componentes Componente A y B. Lo que me gustaría lograr es la ruta a B, pero necesito algunos parámetros de A. Sé que puedo enrutar a B configurando una ruta como esta [/B: parámetro]. Mi problema es que está cambiando la URL de localhost:4200/b a algo así como localhost:4200/b=?parámetro. Me gustaría ocultar el parámetro de los usuarios, ya que es:
-uno: no es relevante para ellos
-dos: puede contener lógica comercial y/o datos confidenciales.
Actualmente, solo configuro una constante en el estado apropiado y la leo en B's onInit, pero eso se siente muy poco elegante, y debería haber una forma mejor y más elegante de hacer las cosas. Francamente, funciona bien, pero no me gusta. ¿Cómo debo abordarlo?
Respuesta corta: pasar datos en la ruta mientras se navega.
Explicación: puede encontrar el parámetro de datos en el documento de ruta ( https://angular.io/api/router/Route )
Ejemplo: En el módulo de enrutamiento:
path: 'auth', component: AuthComponent, data: { type: 'admin' }En AuthComponent puede tomar el tipo de datos usando ActivateRoute
constructor( private activatedRoute: ActivatedRoute ) { this.type = this.activatedRoute.snapshot.data.type; }Entonces puede preguntar: ¿Cómo pasar datos dinámicamente durante el enrutamiento? Compruébalo: Enviar datos a través de rutas de enrutamiento en Angular
Puede cambiar la URL del navegador sin activar ninguna navegación usando, por ejemplo:
window.history.replaceState(undefined, '', '#newdata');
Consulte: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
¡Pero ten mucho cuidado con eso!