使用Angular 2 RC5路由器,如果给出ActivatedRouteSnapshot,我该如何导航?

时间:2017-01-18 18:46:16

标签: javascript angular typescript angular-ui-router

用例

用户无需登录即可访问我网站的某些部分。如果他们点击下载按钮并登录,则会自动开始下载。但是,如果他们单击下载按钮并且未登录,我想提示他们登录。一旦他们登录,我希望他们能够直接回到以前的路线。

我是如何完成它的

当“匿名”用户点击下载按钮时,会给他们一个提示登录的模态。如果他们决定登录,我会将一些对象藏在本地存储中(正在考虑ActivatedRouterSnapshot会做什么?)。登录后,我将检查是否有一个对象存储在本地存储中的stashedRoute下。如果有,我会用它来导航回原来的路线!

我想做什么

假设:

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

private someRoute: ActivatedRouterSnapshot;

constructor(private _router: Router) {}

我想:

this._router.navigate(someRoute)

问题

执行上述操作的语法是什么,或者获取相同的功能来存储路由并重新导航到它?

2 个答案:

答案 0 :(得分:0)

我认为你需要一些像回到路线的历史 您可以将以下代码用作described here

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


@Component(...)

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

答案 1 :(得分:0)

我遇到了类似的问题并通过以下方式解决了这个问题。 flatten来自lodash,route是您的ActivatedRoute。它不是很好,但它现在有效。您可能希望使用flattenDeep来适应深度嵌套的路由。

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