Come ricaricare il percorso corrente con il router angolare 2


141

Sto usando angular 2 con strategia di hashlocation.

Il componente viene caricato con quel percorso:

"departments/:id/employees"

Fin qui tutto bene.

Dopo aver eseguito correttamente il salvataggio in batch di più righe di tabella modificate, voglio ricaricare l'URL del percorso corrente tramite:

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

Ma non succede nulla, perché?


Dai un'occhiata a questa risposta a una domanda simile: stackoverflow.com/a/44580036/550975
Serj Sagan

Risposte:


47

Se la tua navigazione () non modifica l'URL già mostrato nella barra degli indirizzi del tuo browser, il router non ha nulla da fare. Non è compito del router aggiornare i dati. Se si desidera aggiornare i dati, creare un servizio iniettato nel componente e richiamare la funzione di caricamento sul servizio. Se i nuovi dati verranno recuperati, aggiornerà la vista tramite associazioni.


2
Ora dici che devo essere d'accordo MA ... il router angularjs ui aveva un'opzione di ricarica, quindi ricaricare un percorso è considerato ;-) Ma sì, potrei semplicemente fare un ricaricamento dei dati grazie a quel suggerimento che è in realtà ovvio ...
Pascal

83
Non sono d'accordo e se si desidera rieseguire le guardie, dire se qualcuno si disconnette?
Jackie,

1
@Jackie Stavo pensando che forse potresti semplicemente rieseguire le guardie ... se hanno dei reindirizzamenti incorporati, allora potrebbe fare il trucco.
OldTimeGuitarGuy

11
@YakovFain scusa, ma questo è falso. Ciò significa che ora hai due fonti di verità per il comportamento della rotta: una accade durante la guardia, l'altra accade nel componente. Non solo ora stai potenzialmente duplicando la logica, ma stai scontando un flusso di dati più naturale: 1. apporta modifiche all'API, 2. aggiorna il percorso per recuperare il nuovo stato dei dati dall'API, rendendo l'API la fonte della verità. Semplicemente non c'è motivo di NON dare agli utenti la possibilità di riattivare manualmente una route in modo che il flusso naturale di dati possa ripetersi.
AgmLauncher,

4
Non credo sia una buona risposta. Il router dovrebbe essere la fonte di verità per i tuoi dati. Se è necessario ricaricarlo tramite un servizio separato, il router non è più a conoscenza dell'ultima versione e i componenti non possono più fare affidamento sul router come fonte di verità.
Dan King,

125

Questo ora può essere fatto in Angular 5.1 usando la onSameUrlNavigationproprietà della configurazione del router.

Ho aggiunto un blog che spiega come qui, ma l'essenza è la seguente

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

onSameUrlNavigationNell'opzione di abilitazione della configurazione del router , impostandola su 'reload'. Ciò fa sì che il router attivi un ciclo di eventi quando si tenta di navigare verso un percorso già attivo.

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

Nelle definizioni del percorso, impostare runGuardsAndResolverssu always. Questo dirà al router di dare sempre il via ai cicli di guardie e risolutori, lanciando eventi associati.

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

Infine, in ogni componente che si desidera abilitare il ricaricamento, è necessario gestire gli eventi. Questo può essere fatto importando il router, associandolo agli eventi e invocando un metodo di inizializzazione che reimposta lo stato del componente e recupera nuovamente i dati, se necessario.

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 tutti questi passaggi in atto, è necessario abilitare il ricaricamento del percorso.


C'è un modo per ricaricare il componente invece di chiamare una initfunzione,
Ebraheem Alrabeea

Non credo ... a meno che non ti allontani dal percorso e torni di nuovo. Una funzione init non è la fine del mondo, puoi controllare l'inizializzazione al punto che ha lo stesso effetto del ricaricare il componente. C'è qualche motivo particolare per cui si desidera effettuare un ricaricamento completo senza init?
Simon McClive,

Ho trovato una soluzione al mio problema, grazie per la tua risposta e il blog mi è stato utile.
Ebraheem Alrabeea,

Come farlo in Angular 4 diverso da Windows Window.
Vishakha,

Funziona alla grande con la mia app Angular5! L'annullamento dell'iscrizione a ngOnDestroy () è un po 'importante - interessante quando non lo fai :-)
BobC

107

Creare una funzione nel controller che reindirizzi alla route prevista in questo modo

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

quindi usalo in questo modo

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

questa funzione reindirizzerà a un percorso fittizio e tornerà rapidamente al percorso di destinazione senza che l'utente se ne accorga.


3
Grazie! La migliore soluzione qui.
Alan Smith,

Questa soluzione funziona bene, possiamo usarla fino a quando non ne avremo una migliore. Grazie @theo.
Sibeesh Venu,

12
funziona come un incantesimo quando l'ho usato '/'invece di'/DummyComponent'
suhailvs

1
Funziona bene in Angular 7, senza problemi nella cronologia del browser. Ho scelto di utilizzare questa soluzione perché mirato a un componente specifico. Mi sembra che ricaricare la stessa pagina sia generalmente un caso anomalo, quindi far sì che l'intera applicazione segua un paradigma specifico sembra eccessivo. Questo è piccolo e più facile da implementare rispetto ad altre soluzioni.
JE Carter II

1
Va bene, ma ... ricaricherà il tuo componente Home (o qualunque cosa tu abbia sulla rotta "/"), attraverserà l'intero ciclo di vita di ngOnInit / ngOnDestroy per niente. Meglio avere un percorso specifico con un componente fittizio e leggero o noterai il ritardo
petronius

77

MODIFICARE

Per le versioni più recenti di Angular (5.1+) utilizzare la risposta suggerita da @Simon McClive

Vecchia risposta

Ho trovato questa soluzione alternativa in una richiesta di funzionalità GitHub per 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);
    }
});

Ho provato ad aggiungere questo alla mia funzione app.component.ts ngOnInit , e sicuramente ha funzionato. Tutti gli altri clic sullo stesso collegamento ora ricaricano i componentdati e.

Collegamento alla richiesta di funzionalità GitHub originale

Il merito va a mihaicux2 su GitHub.

Ho provato questo sulla versione 4.0.0-rc.3conimport { Router, NavigationEnd } from '@angular/router';


1
Ho appena provato questo in Angular 4.4.x e questo funziona completamente. Grazie!
Mindsect Team,

1
Questo ha funzionato perfettamente per me, fino a quando non ho implementato la barra di navigazione di Material per navigare attraverso le rotte secondarie di ciascuna rotta principale nella mia app. Una volta che l'utente accede alla pagina che esegue questo codice, la barra di inchiostro animata scompare. (Perché? Non ho abbastanza tempo o spazio per spiegare ...)
Andreisrob il

3
Questa è una pessima idea: ActivatedRoute ora sarà sempre la stessa.
artuska,

1
@AnandTyagi Prova la soluzione SimonMcClives se utilizzi Angular 5.1+. Forse funziona meglio per te.
Arg0n,

2
Pessima idea ... Perché una volta applicato routeReuseStrategy.shouldReuseRoute = false, caricherà tutti i componenti della gerarchia dei componenti. Quindi significa che ogni componente genitore e figlio inizia a ricaricare su eventuali modifiche dell'URL. Quindi non c'è alcun significato nell'uso di questo framework.
PSabuwala,

27

Un po 'complicato: usa lo stesso percorso con alcuni parametri fittizi. Per esempio-

refresh(){
  this.router.navigate(["/same/route/path?refresh=1"]);
}

12
Ora: this.router.navigate(['/pocetna'], { queryParams: { 'refresh': 1 } });e route.queryParams.subscribe(val => myRefreshMethod())dove route: ActivatedRouteviene iniettato nel componente aggiornato ... Spero che aiuti
insan-e

4
Attualmente in Angular 7 questo non sembra funzionare più. Qualcuno può confermare o sto facendo qualcosa di sbagliato? (Ho provato anche la leggera variazione di insan-e.)
pbarranis il

2
Un po 'brutto forse.
Dabbbb.

19

Sto usando questo per il progetto Angular 9:

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

PS: testato e funziona anche su "Angular 7, 8"


Ho pensato di condividere la mia esperienza con questa soluzione. Per me, sembra ricaricare l'intero componente associato al percorso. Nella mia situazione un router.navigate normale con parametri di routing diversi manterrà il componente caricato e caricherà semplicemente le nuove modifiche da ngOnInit (basato sui parametri di route). La tua soluzione non sembra farlo, sembra effettivamente ricaricare l'intero componente e quindi apportare le modifiche in ngOnInit in base ai parametri di route. Comunque, è un piccolo inconveniente per me nella mia situazione e la tua soluzione funziona per le mie esigenze.
Evan Sevy,

grazie. funziona perfettamente.
Santosh,

17

Incisione ricaricabile angolare 2-4 percorsi

Per me, usare questo metodo all'interno di un componente root (componente, presente su qualsiasi route) funziona:

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]);
    });
  }

Prestare attenzione con questo approccio, ciò influirà a livello globale sul comportamento del router (la rotta principale verrà sempre ricaricata durante la navigazione tra le rotte secondarie).
seidme

16

Questo funziona per me come un incantesimo

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

3
Questa è la risposta più semplice Vorrei contrassegnare questa come risposta accettata se potessi. Contrariamente alla risposta accettata, potrebbero esserci situazioni in cui è necessario ricaricare ogni singolo componente utilizzato in una pagina e dover ricaricare individualmente ciascuno, che potrebbe trovarsi su percorsi diversi, sarebbe eccessivo anche tramite un servizio.
Andrew Junior Howard,

8

Sulla pagina di ricarica modifica parametri non accadrà. Questa è davvero una buona funzionalità. Non è necessario ricaricare la pagina ma dovremmo modificare il valore del componente. Il metodo paramChange richiamerà la modifica dell'URL. Quindi possiamo aggiornare i dati dei componenti

/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) {

}

8

Questo è quello che ho fatto con Angular 9 . Non sono sicuro che funzioni nelle versioni precedenti.

Dovrai chiamare questo quando dovrai ricaricare.

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

Il router per Root deve avere SameUrlNavigation impostato su 'ricaricare'

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

E ogni tuo percorso deve avere runGuardsAndResolvers impostato su 'sempre'

{
    path: '',
    data: {},
    runGuardsAndResolvers: 'always'
},

1
Questa è la risposta corretta "onSameUrlNavigation" funziona da Angular 5. Per favore, vota per spostarlo verso l'alto
Yaroslav Yakovlev

Questo non ha funzionato per me. Di seguito è stato Andris. Anche se il ricaricamento di Andris non è "pulito" come una normale navigazione di rotta. Non sembra ricaricare l'intera pagina, ma sembra ricaricare l'intero componente associato al percorso. Avevo solo bisogno di componenti figlio da ricaricare in base ai parametri del percorso, non all'intero componente associato al percorso. Ad ogni modo, funziona abbastanza bene. Ho solo pensato di presentare la mia esperienza.
Evan Sevy,

4

Per me funziona hardcoding con

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

1
Non consigliato! Le persone continuano a ripubblicare questa soluzione in diversi modi in questo SO. Sì, potrebbe risolvere il problema immediato, ma in seguito ti dimenticherai di averlo implementato e passerai ore a cercare di scoprire perché la tua app sta vivendo comportamenti strani.
Helzgate,

Se è necessario utilizzare questa soluzione, utilizzare Ebraheem Alrabee e applicarla solo a un singolo percorso.
Helzgate,

4

Per quanto ne so, questo non può essere fatto con il router in Angular 2. Ma potresti semplicemente fare:

window.location.href = window.location.href

Per ricaricare la vista.


3
Questo aggiorna l'intera applicazione non solo il percorso corrente!
rostamiani,

@HelloWorld - Dove mettere così la logica in Angular 7?
Pra_A

Non importa quale versione angolare - questo è solo il normale codice js
HelloWorld

Metti questa funzione clic. window.location.href = '/' o '/ login' che everis definisce all'interno di app-routing.module.ts. Nel mio caso, quando l'utente si disconnette, dovrebbe tornare alla schermata di accesso, quindi al logout desidero cancellare tutti i dati delle autorità e, in caso di successo, utilizzare window.location.href = '/'. Ciò significa ricaricare la pagina di loagin ed eseguire nuovamente javascript. Per il normale cambio di rotta non lo consiglierò quando non è necessario ripetere le funzioni.
Ali Exalter,

Credo che questo potrebbe ripristinare completamente il tuo negozio NgRx - quindi tutti i dati che hai già recuperato andrebbero persi.
John Q,

3

Trovato una soluzione rapida e diretta che non richiede di armeggiare con i meccanismi interni dell'angolare:

Fondamentalmente: basta creare un percorso alternativo con lo stesso modulo di destinazione e passare da uno all'altro:

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

E qui il menu di attivazione:

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

Spero che sia d'aiuto :)


Cosa succede se il percorso alternativo ha un parametro e si desidera ricaricare quando il parametro cambia?
Mukus,

3

Un po 'hardcore ma

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

    this.router.onSameUrlNavigation = 'ignore';

});

2

Nel mio caso:

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

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

funziona correttamente


2

implementare OnInit e chiamare ngOnInit () nel metodo per route.navigate ()

Vedi un esempio:

export class Component implements OnInit {

  constructor() {   }

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

  ngOnInit () {

  }

2

Risolto uno scenario simile usando un componente fittizio e route per reload, che in realtà fa un redirect. Questo sicuramente non copre tutti gli scenari utente ma ha funzionato solo per il mio scenario.

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);
  }
}

Il routing è cablato per catturare tutti gli URL usando un carattere jolly:

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 {}

Per usarlo, dobbiamo solo aggiungere ricaricare l'URL dove vogliamo andare:

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

2

Esistono diversi approcci per aggiornare il percorso corrente

Modifica comportamento router (da Angular 5.1) Impostare i router onSameUrlNavigation su 'ricaricare'. Ciò emetterà gli eventi del router sulla stessa navigazione URL.

  • Puoi quindi gestirli iscrivendoti a un percorso
  • Puoi usarlo con la combinazione di runGuardsAndResolvers per eseguire nuovamente i resolver

Lascia intatto il router

  • Passa a queryParam di aggiornamento con il timestamp corrente nell'URL e iscriviti a queryParams nel componente indirizzato.
  • Utilizzare l'evento di attivazione della presa del router per ottenere una sospensione del componente indirizzato.

Ho scritto una spiegazione più dettagliata sotto https://medium.com/@kevinkreuzer/refresh-current-route-in-angular-512a19d58f6e

Spero che questo ti aiuti.


1

Supponiamo che il percorso del componente che desideri aggiornare sia view, quindi usa questo:

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);
}; 

puoi aggiungere un debuggermetodo interno per sapere qual è il percorso esatto che verrà dopo la navigazione "departments/:id/employees".


1

Una soluzione è passare un parametro fittizio (ovvero il tempo in secondi), in questo modo il collegamento viene sempre ricaricato:

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

1

Sto usando setTimeoute navigationByUrlper risolvere questo problema ... E funziona bene per me.

Viene reindirizzato a un altro URL e invece viene nuovamente visualizzato nell'URL corrente ...

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

1

Credo che questo sia stato risolto (nativamente) in Angular 6+; dai un'occhiata

Questo funziona per un intero percorso (include anche tutti i percorsi per bambini)

Se vuoi scegliere come target un singolo componente, ecco come: Usa un parametro di query che cambia, in modo da poter navigare tutte le volte che vuoi.

Al punto di navigazione (classe)

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

Nel componente che si desidera "aggiornare / ricaricare"

// . . . 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

1

Molto frustrante che Angular non sembra ancora includere una buona soluzione per questo. Ho sollevato un problema github qui: https://github.com/angular/angular/issues/31843

Nel frattempo, questa è la mia soluzione alternativa. Si basa su alcune delle altre soluzioni suggerite sopra, ma penso che sia un po 'più robusto. Implica il wrapping del servizio Router in un " ReloadRouter", che si occupa della funzionalità di ricarica e aggiunge anche una RELOAD_PLACEHOLDERconfigurazione del router principale. Viene utilizzato per la navigazione intermedia ed evita di attivare altri percorsi (o protezioni).

Nota: utilizzare il solo ReloadRouterin quei casi quando si desidera la funzionalità di ricarica. Usa il normale Routeraltrimenti.

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));
  }
}

1

Importa Routere ActivatedRouteda@angular/router

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

Inject Routere ActivatedRoute(nel caso abbiate bisogno di qualcosa dall'URL)

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

Ottieni qualsiasi parametro, se necessario, dall'URL.

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

Utilizzando un trucco passando a un manichino o a un URL principale, quindi all'URL effettivo, il componente verrà aggiornato.

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

Nel tuo caso

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

Se usi un percorso fittizio, vedrai il titolo lampeggiare "Non trovato" se hai implementato un URL non trovato nel caso in cui non corrisponda a nessun URL.


0

iscriviti per modificare i parametri del percorso

    // 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'];
    });

0

Se si sta modificando il percorso tramite il collegamento del router, attenersi alla seguente procedura:

  constructor(public routerNavigate: Router){

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

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

            if (evt instanceof NavigationEnd) {

                this.router.navigated = false;
             }
          })
      }

0

È necessario utilizzare la proprietà "onSameUrlNavigation" in RouterModule e quindi iscriversi agli eventi Route https://blog.angularindepth.com/refresh-current-route-in-angular-512a19d58f6e


Un link a una soluzione è il benvenuto, ma assicurati che la tua risposta sia utile senza di essa: aggiungi un contesto attorno al link in modo che i tuoi colleghi utenti abbiano qualche idea di cosa sia e perché sia ​​lì, quindi cita la parte più pertinente della pagina che ' re collegamento a nel caso in cui la pagina di destinazione non sia disponibile. Le risposte che sono poco più di un collegamento possono essere eliminate.
Alessio,

0

Decide quando deve essere memorizzato il percorso restituire false

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

e impostare il valore navigato del router su false, che mostra che questa route non è mai stata instradata

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

0

Ho provato alcune correzioni e nessuna di queste funziona. La mia versione è semplice: aggiungi un nuovo parametro non utilizzato nei parametri della query

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

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

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

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

0

window.location.replace

// usa backtick per racchiudere il percorso

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.