Angular2: comment trouver l'url de la page précédente lorsque vous utilisez angular2 routing

je développe une application angular2 et j'utilise un routeur. Je suis dans une page /myapp/inscription. après l'inscription, je navigue vers /myapp / login. /myapp/connexion peut également être parcouru à partir de ma page d'accueil qui est /myapp. Donc maintenant, quand l'utilisateur utilise/myapp / login, je reviens en arrière. Cela peut être fait en utilisant l'emplacement.arrière.)( Mais je ne veux pas revenir en arrière quand l'utilisateur vient de /myapp/inscription. Je devrais donc vérifier si l'utilisateur vient de /myapp/signup et si c'est le cas, je veux le diriger vers un autre endroit. Comment puis-je savoir l'url précédente, de sorte que je diriger l'utilisateur vers un état spécifique basé sur qui ?

10
demandé sur user3205675 2016-02-09 00:04:17

8 réponses

pairwise opérateur permet d'obtenir le courant avec la valeur précédente

mise à jour

import 'rxjs/add/operator/pairwise';
import 'rxjs/add/operator/filter';
import { Router, NavigationEnd } from '@angular/router';

export class AppComponent {
    constructor(private router: Router) {
        this.router.events
        .filter(e => e instanceof NavigationEnd)
        .pairwise().subscribe((e) => {
            console.log(e);
        });
    }
}

Voir aussi Comment détecter un changement d'itinéraire Angulaire?

origine (super vieux)

Injecter Router et vous abonner à des événements et de les conserver pour référence ultérieure

constructor(private _router: Router) {
  this._router.subscribe(route => {
    this.nextRoute ...
    this.prevRoute ...
  });
21
répondu Günter Zöchbauer 2018-04-29 01:02:07

Oui, je voudrais faire de cette façon:

@Injectable() // do not forget to register this class as a provider
export class PreviousRouteRecorder implements CanDeactivate<any> {
  constructor(private router: Router) {
  }
  canDeactivate(component: any): Observable<boolean> | boolean {
    localStorage.setItem('previousRoute', this.router.url);
    return true;
  }
}

export const ROUTES: Routes = [
  {
    path: 'first',
    component: FirstComponent,
    canDeactivate: [PreviousRouteRecorder]},
  {
    path: 'second',
    component: SecondComponent
  }
];

export class SecondComponent implements OnInit {
  ngOnInit(){
    console.log(localStorage.getItem('previousRoute'));
  }
}
1
répondu Stephen Paul 2016-11-01 05:57:49

Vous pouvez le faire avec document.referrer

if(document.referrer !== '/myapp/signup'){
    location.back()
}
0
répondu Bob van Luijt 2016-02-08 21:07:45

vous pouvez peut-être tirer parti de la OnActivate phaserouterOnActivate méthode qui vous permet d'accéder à l'url précédente et l'actuelle.

routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) {
  console.log(`Finished navigating from "${prev ? prev.urlPath : 'null'}" to "${next.urlPath}"`);
}
0
répondu cexbrayat 2016-02-09 08:36:54

l'implémentation avec le pairwise ne fonctionnera pas si l'utilisateur ne déclenche pas l'événement de navigation au moins deux fois et peut causer un petit bug.

page 1 - > page 2 --- >événement de navigation déclenché, mais L'événement Observable n'a qu'une valeur et n'émet donc pas --- >L'utilisateur ne peut pas retourner à la page 1

page 2 - > page 3 -- >event Observable a maintenant 2 éléments et émet en paires

je me demande s'il y a une solution?

0
répondu Hou 2017-05-08 15:11:48

Vous pouvez définir l'url précédente en utilisant une guard auth et définir l'url précédente dans n'importe quel étaient de l'application.

canActivate(route: ActivatedRouteSnapshot, snapshot: RouterStateSnapshot) {
                this.commonService.prevRouter = this.router.url;
}
0
répondu Soumya K 2017-09-18 12:12:14

Angular 6 Code mis à jour pour obtenir l'url précédente comme chaîne.

import { Component, OnInit } from '@angular/core';
import { Router, RoutesRecognized } from '@angular/router';
import { filter, pairwise } from 'rxjs/operators';


export class AppComponent implements OnInit {

    constructor (
        public router: Router
    ) {
    }

    ngOnInit() {
        this.router.events
            .pipe(filter((e: any) => e instanceof RoutesRecognized),
                pairwise()
            ).subscribe((e: any) => {
                console.log(e[0].urlAfterRedirects); // previous url
            });
    }
0
répondu Franklin Pious 2018-06-16 07:27:50
import {Location} from '@angular/common';

 private currentLocation;
 constructor(private location: Location){
    this.currentLocation = this.location.path();  
   }

ngAfterViewInit() {
 let instance = this;
 this.router.parent.subscribe(() => {            
        if (instance.currentLocation != instance.location.path()) {
             console.log("previous -> "+instance.currentLocation+" != next -> "+instance.location.path());             
        }else{
            console.log("previous -> "+instance.currentLocation+" == next -> "+instance.location.path());
        }
    });
}
-1
répondu Jean Palmeira 2016-07-25 16:17:19