Tengo un problema en el que parece que no puedo navegar a una nueva ruta y borrar una salida/ruta secundaria al mismo tiempo.
Llamar a esas dos acciones por separado funciona, pero se siente como una solución. ¿Hay alguna buena razón por la que deban hacerse como dos llamadas? ¿O hay un error en mi implementación? ¿O debería archivarlo como un problema de GitHub?
Estos funcionan de forma independiente:
// Navigate to `/second` this._router.navigate(['/second']); // Clears the `popup` outlet this._router.navigate(['', {outlets: { popup: null }}]);Pensé que esto debería funcionar, pero no borra la salida:
this._router.navigate(['/second', {outlets: { popup: null }}]);Mi solución actual es:
this._router.navigate(['', {outlets: { popup: null }}]).then(() => { this._router.navigate(['second']); } ); Creé una prueba de concepto de plnkr : el código de navegación está en global-popup.component.ts
Lo anterior funciona cuando la navegación principal es absoluta en la ruta principal. El problema que tengo es: cómo hacer una navegación relativa en la ruta principal, mientras se borra la ruta secundaria.
He probado diferentes combinaciones pero ninguna parece funcionar:
comenzando en https://localhost:4200/one/two(popup:some/other)
this.router.navigate([ '', { outlets: { primary: ['areaTwo', 'second'], popup: null, }, }, ]); terminando en https://localhost:4200/areaTwo/second
Por lo tanto, borra la ventana emergente secundaria y realiza una navegación absoluta.
comenzando en https://localhost:4200/one/two(popup:some/other)
this.router.navigate([ { outlets: { primary: ['areaTwo', 'second'], popup: null, }, }, ], { relativeTo: this.activatedRoute }); terminando en https://localhost:4200/one/two/areaTwo/second(popup:some/other)
Entonces hace un pariente en el primario, pero no borra el secundario.
Pero, ¿cómo podemos hacer algo como:
comenzando en https://localhost:4200/one/two(popup:some/other)
terminando en https://localhost:4200/one/two/areaTwo/second