2 votes

En utilisant le routeur Angular 2 RC5, comment puis-je naviguer, étant donné un ActivatedRouteSnapshot ?

Cas d'utilisation

L'utilisateur peut accéder à certaines parties de mon site sans être connecté. S'il clique sur un bouton de téléchargement et qu'il est connecté, le téléchargement démarre automatiquement. En revanche, s'il clique sur le bouton de téléchargement et n'est pas connecté, j'aimerais l'inviter à se connecter. Une fois qu'ils sont connectés, j'aimerais qu'ils soient renvoyés directement à l'itinéraire sur lequel ils se trouvaient précédemment.

Comment j'essaie de l'accomplir

Lorsqu'un utilisateur "anonyme" clique sur un bouton de téléchargement, il reçoit une modale l'invitant à se connecter. S'il décide de se connecter, je stocke un objet dans le stockage local (je pensais à un fichier ActivatedRouterSnapshot ferait ?). Après la connexion, je vérifie s'il y a un objet stocké sous le nom de stashedRoute dans le stockage local. S'il y en a, je l'utiliserai pour les ramener à leur itinéraire initial !

Ce que je veux faire

Étant donné :

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

y

private someRoute: ActivatedRouterSnapshot;

constructor(private _router: Router) {}

Je le veux :

this._router.navigate(someRoute)

La question

Quelle est la syntaxe pour faire ce qui précède, ou pour obtenir la même fonctionnalité pour stocker un itinéraire et y naviguer à nouveau ?

0voto

Bardia Rastin Points 409

Je pense que vous avez besoin d'une sorte d'historique pour revenir en arrière. vous pouvez utiliser le code ci-dessous comme décrit ici

import {Component} from '@angular/core';
import {Location} from '@angular/common';

@Component(...)

class AppCmp {
  constructor(private _location: Location) {
  }
  backClicked() {
    this._location.back();
  }
}

0voto

altschuler Points 1072

J'ai eu un problème similaire et je l'ai résolu de la manière suivante. flatten vient de lodash et route est votre ActivatedRoute. Ce n'est pas génial, mais cela fonctionne pour l'instant. Vous pourriez utiliser flattenDeep pour tenir compte des routes profondément imbriquées.

const route = flatten(route.pathFromRoot.map(r => r.url)).map(s => s.path);
this.router.navigate(route);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X