Cómo recargar la ruta actual con el enrutador angular 2

141

Estoy usando angular 2 con estrategia de hashlocation.

El componente se carga con esa ruta:

"departments/:id/employees"

Hasta ahora bien.

Después de realizar un guardado por lotes exitoso de varias filas de tablas editadas, quiero volver a cargar la URL de ruta actual a través de:

this.router.navigate([`departments/${this.id}/employees`]);

Pero no pasa nada, ¿por qué?

Pascal
fuente
Eche un vistazo a esta respuesta a una pregunta similar: stackoverflow.com/a/44580036/550975
Serj Sagan

Respuestas:

47

Si su navegador () no cambia la URL que ya se muestra en la barra de direcciones de su navegador, el enrutador no tiene nada que hacer. No es el trabajo del enrutador actualizar los datos. Si desea actualizar los datos, cree un servicio inyectado en el componente e invoque la función de carga en el servicio. Si se recuperan los nuevos datos, actualizará la vista mediante enlaces.

Yakov Fain
fuente
2
Ahora lo dices, debo estar de acuerdo PERO ... el enrutador angularjs ui tenía una opción de recarga, por lo que se recarga la ruta ;-) Pero sí, podría hacer una recarga de datos gracias a esa punta que es realmente obvio ...
Pascal
83
No estoy de acuerdo, ¿qué pasa si quieres volver a ejecutar a los guardias, decir si alguien cierra sesión?
Jackie
1
@Jackie Estaba pensando que tal vez podrías volver a ejecutar a los guardias ... si tienen redirecciones incorporadas, entonces eso podría ser el truco.
OldTimeGuitarGuy
11
@YakovFain lo siento, pero esto es falso. Esto significa que ahora tiene dos fuentes de verdad para el comportamiento de la ruta: una ocurre durante la guardia y la otra ocurre en el componente. Ahora no solo está potencialmente duplicando la lógica, sino que está oponiéndose a un flujo de datos más natural: 1. realice cambios en la API, 2. actualice la ruta para obtener el nuevo estado de datos de la API, haciendo de la API la fuente de la verdad. Simplemente no hay razón para NO dar a los usuarios la capacidad de reactivar manualmente una ruta para que el flujo natural de datos pueda volver a ocurrir.
AgmLauncher
44
No creo que esta sea una buena respuesta. El enrutador debe ser la fuente de verdad para sus datos. Si tiene que volver a cargarlo a través de un servicio separado, el enrutador ya no conoce la última versión y sus componentes ya no pueden confiar en su enrutador como la fuente de la verdad.
Dan King
125

Esto ahora se puede hacer en Angular 5.1 utilizando la onSameUrlNavigationpropiedad de la configuración del enrutador.

He agregado un blog que explica cómo aquí, pero lo esencial es lo siguiente

https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2

En la onSameUrlNavigationopción de habilitación de configuración del enrutador , configúrelo en 'reload'. Esto hace que el enrutador active un ciclo de eventos cuando intenta navegar a una ruta que ya está activa.

@ngModule({
 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
 exports: [RouterModule],
 })

En sus definiciones de ruta, establezca runGuardsAndResolversen always. Esto le indicará al enrutador que siempre inicie los guardias y los ciclos de resolución, disparando los eventos asociados.

export const routes: Routes = [
 {
   path: 'invites',
   component: InviteComponent,
   children: [
     {
       path: '',
       loadChildren: './pages/invites/invites.module#InvitesModule',
     },
   ],
   canActivate: [AuthenticationGuard],
   runGuardsAndResolvers: 'always',
 }
]

Finalmente, en cada componente que le gustaría habilitar la recarga, debe manejar los eventos. Esto se puede hacer importando el enrutador, vinculando los eventos e invocando un método de inicialización que restablece el estado de su componente y vuelve a buscar datos si es necesario.

export class InviteComponent implements OnInit, OnDestroy {
 navigationSubscription;     

 constructor(
   // … your declarations here
   private router: Router,
 ) {
   // subscribe to the router events. Store the subscription so we can
   // unsubscribe later.
   this.navigationSubscription = this.router.events.subscribe((e: any) => {
     // If it is a NavigationEnd event re-initalise the component
     if (e instanceof NavigationEnd) {
       this.initialiseInvites();
     }
   });
 }

 initialiseInvites() {
   // Set default values and re-fetch any data you need.
 }

 ngOnDestroy() {
   if (this.navigationSubscription) {
     this.navigationSubscription.unsubscribe();
   }
 }
}

Con todos estos pasos en su lugar, debe habilitar la recarga de ruta.

Simon McClive
fuente
¿Hay alguna manera de recargar el componente en lugar de llamar a una initfunción?
Ebraheem Alrabeea
No lo creo ... a menos que te alejes de la ruta y vuelvas de nuevo. Una función init no es el fin del mundo, puedes controlar la inicialización hasta el punto de que tenga el mismo efecto que recargar el componente. ¿Hay alguna razón en particular sin la que quieras hacer una recarga completa init?
Simon McClive
He encontrado una solución para mi problema, gracias por su respuesta y el blog fue útil.
Ebraheem Alrabeea
Cómo hacerlo en Angular 4 además de la recarga de ventana.
Vishakha
¡Funciona muy bien para mi aplicación Angular5! Darse de baja en ngOnDestroy () es algo importante, interesante cuando no lo haces :-)
BobC
107

Cree una función en el controlador que redirija a la ruta esperada así

redirectTo(uri:string){
   this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
   this.router.navigate([uri]));
}

entonces úsalo así

this.redirectTo('//place your uri here');

Esta función redirigirá a una ruta ficticia y volverá rápidamente a la ruta de destino sin que el usuario se dé cuenta.

Theo Sharkson
fuente
3
¡Gracias! La mejor solución aquí.
Alan Smith
Esta solución funciona bien, podemos usarla hasta obtener una mejor. Gracias @theo.
Sibeesh Venu
12
funciona como un encanto cuando lo uso en '/'lugar de'/DummyComponent'
suhailvs
1
Funciona bien en Angular 7, sin problemas en el historial del navegador. Opté por usar esta solución debido a que estaba dirigida a un componente específico. Me parece que recargar la misma página es generalmente un caso anormal, por lo que hacer que toda la aplicación siga un paradigma específico parece una exageración. Esto es pequeño y más fácil de implementar que otras soluciones.
JE Carter II
1
Está bien, pero funciona ... volverá a cargar su HomeComponent (o lo que sea que tenga en la ruta "/"), pasará por el ciclo de vida completo de ngOnInit / ngOnDestroy por nada. Es mejor tener una ruta específica con algún componente ficticio y liviano o notará el retraso
petronius
77

EDITAR

Para versiones más recientes de Angular (5.1+), use la respuesta sugerida por @Simon McClive

Vieja respuesta

Encontré esta solución en una solicitud de función de GitHub para Angular:

this._router.routeReuseStrategy.shouldReuseRoute = function(){
    return false;
};

this._router.events.subscribe((evt) => {
    if (evt instanceof NavigationEnd) {
        this._router.navigated = false;
        window.scrollTo(0, 0);
    }
});

Intenté agregar esto a mi función app.component.ts ngOnInit , y seguro funcionó. Todos los clics adicionales en el mismo enlace ahora vuelven a cargar los componentdatos y.

Enlace a la solicitud de función original de GitHub

El crédito va a mihaicux2 en GitHub.

Probé esto en la versión 4.0.0-rc.3conimport { Router, NavigationEnd } from '@angular/router';

Arg0n
fuente
1
Acabo de probar esto en Angular 4.4.xy esto funciona completamente. ¡Gracias!
Mindsect Team
1
Esto funcionó muy bien para mí, hasta que implementé la barra de pestañas de navegación de Material para navegar por las rutas secundarias de cada ruta principal en mi aplicación. Una vez que el usuario llega a la página que ejecuta este código, la barra de tinta animada desaparecerá. (¿Por qué? No tengo suficiente tiempo o espacio para explicar ...)
andreisrob
3
Esta es una muy mala idea: su ActivatedRoute ahora siempre será la misma.
artuska
1
@AnandTyagi Prueba la solución SimonMcClives si estás en Angular 5.1+. Tal vez eso funcione mejor para ti.
Arg0n
2
Muy mala idea ... Porque una vez que aplicó routeReuseStrategy.shouldReuseRoute = false, cargará todos los componentes de la jerarquía de componentes. Por lo tanto, significa que todos sus componentes primarios y secundarios comienzan a recargarse en cualquier cambio de URL. Entonces, no tiene sentido usar este marco.
PSabuwala
27

Poco complicado: usa el mismo camino con algunos params ficticios. Por ejemplo-

refresh(){
  this.router.navigate(["/same/route/path?refresh=1"]);
}
newari
fuente
12
Ahora: this.router.navigate(['/pocetna'], { queryParams: { 'refresh': 1 } });y route.queryParams.subscribe(val => myRefreshMethod())dónde route: ActivatedRoutese inyecta en el componente actualizado ... Espero que ayude
insan-e
44
Actualmente en Angular 7 esto ya no parece funcionar. ¿Alguien puede confirmar, o estoy haciendo algo mal? (También probé la ligera variación de insan-e.)
pbarranis
2
Un poco feo tal vez.
Dabbbb.
19

Estoy usando este para el proyecto Angular 9:

reloadCurrentRoute() {
    let currentUrl = this.router.url;
    this.router.navigateByUrl('/', {skipLocationChange: true}).then(() => {
        this.router.navigate([currentUrl]);
    });
}

PD: Probado y funciona también en "Angular 7, 8"

Andris
fuente
Pensé en intervenir en mi experiencia con esta solución. Para mí, parece recargar todo el componente asociado con la ruta. En mi situación, un router.navigate regular con diferentes parámetros de enrutamiento mantendrá el componente cargado y solo cargará los nuevos cambios de ngOnInit (basado en parámetros de ruta). Parece que su solución no hace esto, parece que en realidad vuelve a cargar todo el componente y luego realiza los cambios en ngOnInit en función de los parámetros de ruta. De todos modos, es un inconveniente menor para mí en mi situación y su solución funciona para mis necesidades.
Evan Sevy
gracias. funciona perfectamente.
Santosh
17

Hack de recarga angular de 2-4 rutas

Para mí, usar este método dentro de un componente raíz (componente, que está presente en cualquier ruta) funciona:

onRefresh() {
  this.router.routeReuseStrategy.shouldReuseRoute = function(){return false;};

  let currentUrl = this.router.url + '?';

  this.router.navigateByUrl(currentUrl)
    .then(() => {
      this.router.navigated = false;
      this.router.navigate([this.router.url]);
    });
  }
indignado
fuente
Tenga cuidado con este enfoque, esto afectará globalmente el comportamiento del enrutador (la ruta principal siempre se recargará cuando navegue entre rutas secundarias).
seidme
16

Esto me funciona como un encanto

this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
this.router.navigate([<route>]));
Nitin Kamate
fuente
3
Esta es la respuesta más simple. Marcaría esto como la respuesta aceptada si pudiera. Contrariamente a la respuesta aceptada, puede haber situaciones en las que necesite volver a cargar cada uno de los componentes utilizados en una página y tener que volver a cargar cada uno individualmente, que puede estar en rutas diferentes, sería excesivo incluso a través de un servicio.
Andrew Junior Howard
8

En el cambio de parámetros, la página de recarga no sucederá. Esta es una muy buena característica. No es necesario volver a cargar la página, pero debemos cambiar el valor del componente. El método paramChange invocará el cambio de URL. Para que podamos actualizar los datos del componente

/product/: id / details

import { ActivatedRoute, Params, Router } from ‘@angular/router’;

export class ProductDetailsComponent implements OnInit {

constructor(private route: ActivatedRoute, private router: Router) {
    this.route.params.subscribe(params => {
        this.paramsChange(params.id);
    });
}

// Call this method on page change

ngOnInit() {

}

// Call this method on change of the param
paramsChange(id) {

}
karthi
fuente
8

Esto es lo que hice con Angular 9 . No estoy seguro de si esto funciona en versiones anteriores.

Tendrá que llamar a esto cuando necesite recargar.

 this.router.navigate([], {
    skipLocationChange: true,
    queryParamsHandling: 'merge' //== if you need to keep queryParams
  })

El enrutador paraRoot necesita tener SameUrlNavigation configurado para 'recargar'

 RouterModule.forRoot(appRoutes, {
  // ..
  onSameUrlNavigation: 'reload',
  // ..
})

Y todas sus rutas deben tener runGuardsAndResolvers configurados en 'siempre'

{
    path: '',
    data: {},
    runGuardsAndResolvers: 'always'
},
Wlada
fuente
1
Esta es la respuesta correcta. "onSameUrlNavigation" funciona desde Angular 5. Por favor, vote a favor para moverlo a la cima
Yaroslav Yakovlev
Esto no funcionó para mí. Andris de abajo lo hizo. Aunque la recarga de Andris no es tan "limpia" como una navegación de ruta regular real. No parece recargar toda la página, pero parece recargar todo el componente asociado con la ruta. Solo necesitaba que los componentes secundarios se volvieran a cargar según los parámetros de la ruta, no todo el componente asociado con la ruta. De todos modos, funciona lo suficientemente bien. Solo pensé en intervenir en mi experiencia.
Evan Sevy
4

Para mí trabaja hardcoding con

this.router.routeReuseStrategy.shouldReuseRoute = function() {
    return false;
    // or
    return true;
};
Vlad
fuente
1
¡No recomendado! La gente sigue publicando esta solución de diferentes maneras a lo largo de este SO. Sí, puede solucionar su problema inmediato, pero más tarde olvidará que implementó esto y pasará horas tratando de descubrir por qué su aplicación está experimentando un comportamiento extraño.
Helzgate
Si debe usar esto, use la solución Ebraheem Alrabee 'y solo aplíquela a una sola ruta.
Helzgate
4

Hasta donde sé, esto no se puede hacer con el enrutador en Angular 2. Pero podría hacer lo siguiente:

window.location.href = window.location.href

Para recargar la vista.

Hola Mundo
fuente
3
¡Esto actualiza toda la aplicación, no solo la ruta actual!
rostamiani
@HelloWorld - ¿Dónde poner así la lógica en angular 7?
Pra_A
No importa qué versión angular, esto es solo código js regular
HelloWorld
Ponga esto en la función de clic. window.location.href = '/' o '/ login' que siempre se define dentro de app-routing.module.ts. En mi caso, cuando el usuario cierra sesión, debería volver a la pantalla de inicio de sesión, así que al cerrar sesión borro todos los datos de autenticación y, en caso de éxito, uso window.location.href = '/'. Esto significa volver a cargar la página de inicio de sesión y volver a ejecutar todo javascript nuevamente. Para el cambio normal de ruta, no recomendaré esto cuando no se requiera la repetición de funciones.
Ali Exalter
Creo que esto puede restablecer por completo su tienda NgRx, por lo que se perderán todos los datos que ya haya obtenido.
John Q
3

Encontré una solución rápida y directa que no requiere jugar con el funcionamiento interno de angular:

Básicamente: solo cree una ruta alternativa con el mismo módulo de destino y solo alterne entre ellos:

const routes: Routes = [
  {
    path: 'gesuch',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  },
  {
    path: 'gesuch-neu',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  }
];

Y aquí el menú de alternancia:

<ul class="navigation">
    <li routerLink="/gesuch-neu" *ngIf="'gesuch' === getSection()">Gesuch</li>
    <li routerLink="/gesuch" *ngIf="'gesuch' !== getSection()">Gesuch</li>
</ul>

Espero eso ayude :)

Carli Beeli
fuente
¿Qué sucede si la ruta alternativa tiene un parámetro y desea volver a cargar cuando cambia el parámetro?
Mukus
3

Un poco duro pero

this.router.onSameUrlNavigation = 'reload';
this.router.navigateByUrl(this.router.url).then(() => {

    this.router.onSameUrlNavigation = 'ignore';

});
Dzmitry Vasilevsky
fuente
2

En mi caso:

const navigationExtras: NavigationExtras = {
    queryParams: { 'param': val }
};

this.router.navigate([], navigationExtras);

trabajo correcto

Anton Zimm
fuente
2

implementar OnInit y llamar a ngOnInit () en el método para route.navigate ()

Ver un ejemplo:

export class Component implements OnInit {

  constructor() {   }

  refresh() {
    this.router.navigate(['same-route-here']);
    this.ngOnInit();   }

  ngOnInit () {

  }
Evandro Mendes
fuente
2

Resolvió un escenario similar mediante el uso de un componente ficticio y una ruta para reload, que en realidad hace a redirect. Esto definitivamente no cubre todos los escenarios de los usuarios, pero solo funcionó para mi escenario.

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Http } from '@angular/http';

@Component({
  selector: 'reload',
  template: `
    <h1>Reloading...</h1>
  `,
})
export class ReloadComponent implements OnInit{
  constructor(private router: Router, private route: ActivatedRoute) {
  }

  ngOnInit() {
    const url = this.route.snapshot.pathFromRoot.pop().url.map(u => u.path).join('/');
    this.router.navigateByUrl(url);
  }
}

El enrutamiento está conectado para capturar todas las URL utilizando un comodín:

import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { LoginViewComponent } from './views/login/login.component';
import { HomeViewComponent } from './views/home/home.component';
import { ReloadComponent } from './views/reload/reload.component';

@NgModule({
  declarations: [ 
    LoginViewComponent, HomeViewComponent, ReloadComponent
  ],
  imports: [
    RouterModule.forRoot([
      { path: 'login', component: LoginViewComponent },
      { path: 'home', component: HomeViewComponent },
      { 
        path: 'reload',
        children: [{
          path: '**',
          component: ReloadComponent 
        }]
      },
      { path: '**', redirectTo: 'login'}
    ])
  ],
  exports: [
    RouterModule,
  ],
  providers: [],

})
export class AppRoutingModule {}

Para usar esto, solo necesitamos agregar recargar a la url donde queremos ir:

  this.router.navigateByUrl('reload/some/route/again/fresh', {skipLocationChange: true})
sabithpocker
fuente
2

Existen diferentes enfoques para actualizar la ruta actual

Cambiar el comportamiento del enrutador (desde Angular 5.1) Configure los enrutadores enSameUrlNavigation para 'recargar'. Esto emitirá los eventos del enrutador en la misma navegación URL.

  • Luego puede manejarlos suscribiéndose a una ruta
  • Puede usarlo con la combinación de runGuardsAndResolvers para volver a ejecutar resolvers

Deje el enrutador intacto

  • Pase un queryParam de actualización con la marca de tiempo actual en la URL y suscríbase a queryParams en su componente enrutado.
  • Use el Evento de activación de la salida del enrutador para obtener el componente enrutado.

He escrito una explicación más detallada en https://medium.com/@kevinkreuzer/refresh-current-route-in-angular-512a19d58f6e

Espero que esto ayude.

Trafalgar
fuente
1

Suponga que la ruta del componente que desea actualizar es view, luego use esto:

this.router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) {
  if (future.url.toString() === 'view' && curr.url.toString() === future.url.toString()) {
    return false;
  }
  return (future.routeConfig === curr.routeConfig);
}; 

puede agregar un debuggermétodo interno para saber cuál será la ruta exacta después de navegar "departments/:id/employees".

Ebraheem Alrabeea
fuente
1

Una solución es pasar un parámetro ficticio (es decir, el tiempo en segundos), de esta manera el enlace siempre se recarga:

this.router.navigate(["/url", {myRealData: RealData, dummyData: (new Date).getTime()}])
losciur
fuente
1

Estoy usando setTimeouty navigationByUrlpara resolver este problema ... Y está funcionando bien para mí.

Se redirige a otra URL y, en su lugar, vuelve a aparecer en la URL actual ...

 setTimeout(() => {
     this.router.navigateByUrl('/dashboard', {skipLocationChange: false}).then(() =>
           this.router.navigate([route]));
     }, 500)
ajay hariyal
fuente
1

Creo que esto se ha resuelto (de forma nativa) en Angular 6+; cheque

Pero esto funciona para una ruta completa (incluye todas las rutas secundarias también)

Si desea apuntar a un solo componente, así es como: use un parámetro de consulta que cambie, para que pueda navegar tantas veces como desee.

En el punto de navegación (clase)

   this.router.navigate(['/route'], {
        queryParams: { 'refresh': Date.now() }
    });

En el componente que desea "actualizar / recargar"

// . . . Component Class Body

  $_route$: Subscription;
  constructor (private _route: ActivatedRoute) {}

  ngOnInit() {
    this.$_route$ = this._route.queryParams.subscribe(params => {
      if (params['refresh']) {
         // Do Something
         // Could be calling this.ngOnInit() PS: I Strongly advise against this
      }

    });
  }

  ngOnDestroy() {
    // Always unsubscribe to prevent memory leak and unexpected behavior
    this.$_route$.unsubscribe();
  }

// . . . End of Component Class Body
mbao01
fuente
1

Muy frustrante que Angular todavía no parece incluir una buena solución para esto. He planteado un problema de github aquí: https://github.com/angular/angular/issues/31843

Mientras tanto, esta es mi solución. Se basa en algunas de las otras soluciones sugeridas anteriormente, pero creo que es un poco más robusto. Implica envolver el servicio de enrutador en un " ReloadRouter", que se encarga de la funcionalidad de recarga y también agrega un RELOAD_PLACEHOLDERa la configuración del enrutador central. Esto se utiliza para la navegación intermedia y evita la activación de otras rutas (o guardias).

Nota: Use solo ReloadRouteren esos casos cuando desee la funcionalidad de recarga. Use lo normal de lo Routercontrario.

import { Injectable } from '@angular/core';
import { NavigationExtras, Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class ReloadRouter {
  constructor(public readonly router: Router) {
    router.config.unshift({ path: 'RELOAD_PLACEHOLDER' });
  }

  public navigate(commands: any[], extras?: NavigationExtras): Promise<boolean> {
    return this.router
      .navigateByUrl('/RELOAD_PLACEHOLDER', {skipLocationChange: true})
      .then(() => this.router.navigate(commands, extras));
  }
}
Dan King
fuente
1

Importar Routery ActivatedRoutedesde@angular/router

import { ActivatedRoute, Router } from '@angular/router';

Inyectar Routery ActivatedRoute(en caso de que necesite algo de la URL)

constructor(
    private router: Router,
    private route: ActivatedRoute,
) {}

Obtenga cualquier parámetro si es necesario de la URL.

const appointmentId = this.route.snapshot.paramMap.get('appointmentIdentifier');

El uso de un truco al navegar a una URL ficticia o principal y luego a la URL real actualizará el componente.

this.router.navigateByUrl('/appointments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`appointment/${appointmentId}`])
});

En tu caso

const id= this.route.snapshot.paramMap.get('id');
this.router.navigateByUrl('/departments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`departments/${id}/employees`]);
});

Si usa una ruta ficticia, verá un parpadeo del título 'No encontrado' si ha implementado una url no encontrada en caso de que no coincida con ninguna url.

Aamer Shahzad
fuente
0

suscribirse a los cambios de parámetros de ruta

    // parent param listener ie: "/:id"
    this.route.params.subscribe(params => {
        // do something on parent param change
        let parent_id = params['id']; // set slug
    });

    // child param listener ie: "/:id/:id"
    this.route.firstChild.params.subscribe(params => {
        // do something on child param change
        let child_id = params['id'];
    });
Omar
fuente
0

Si está cambiando la ruta a través de Router Link, siga esto:

  constructor(public routerNavigate: Router){

         this.router.routeReuseStrategy.shouldReuseRoute = function () {
            return false;
          };

          this.router.events.subscribe((evt) => {

            if (evt instanceof NavigationEnd) {

                this.router.navigated = false;
             }
          })
      }
Omkar Joshi
fuente
0

Debe usar la propiedad "onSameUrlNavigation" en RouterModule y luego suscribirse a los eventos de ruta https://blog.angularindepth.com/refresh-current-route-in-angular-512a19d58f6e

Dasha Lazovskaya
fuente
Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: agregue contexto alrededor del enlace para que sus otros usuarios tengan una idea de qué es y por qué está allí, luego cite la parte más relevante de la página ' volver a vincular en caso de que la página de destino no esté disponible. Se pueden eliminar las respuestas que son poco más que un enlace.
Alessio
0

Decide cuándo se debe almacenar la ruta y devuelve false a

this.router.routeReuseStrategy.shouldReuseRoute = function () {
    return false;
};

y establece el valor navegado del enrutador en falso, que muestra que esta ruta nunca enrutada

this.mySubscription = this.router.events.subscribe(event => {
    if (event instanceof NavigationEnd) {
        this.router.navigated = false;
    }
});
Mohit Sharma
fuente
0

He intentado algunas correcciones y ninguna de ellas funciona. Mi versión es simple: agregar un nuevo parámetro no utilizado en los parámetros de consulta

            if (force) {
                let key = 'time';

                while (key in filter) {
                    key = '_' + key;
                }

                filter[key] = Date.now();
            }

            this.router.navigate(['.', { filter: JSON.stringify(filter) }]);
tom10271
fuente
0

window.location.replace

// usa la tecla de retroceso para encerrar la ruta

window.location.replace ( departments/${this.id}/employees)

7guyo
fuente