【问题标题】:Angular 7.3 how to get data from the routeAngular 7.3如何从路由中获取数据
【发布时间】:2020-04-25 22:43:37
【问题描述】:

我想将 app.routing.ts 文件中的当前 URL 传递给 guard,因为由于某种原因导致 url 在防护中重置存在问题。下面我添加了如何将数据传递给路由。

const appRoutes: Routes = [
  {
    path: '',
    loadChildren: './plain-page.module#PlainPageModule',
    canActivate: [TravelplanTokenGuard],
    data: {'url': new URL(window.location.href)}
  },

现在我的问题是:如何使用 Angular 7.3 在我的守卫中获取此 URL 数据?我尝试了多种解决方案,例如下面的 ActiveRoute 解决方案

canActivate() {
  this.route.data.subscribe(data => {
    console.log(data);
  });
}

const url = this.route.snapshot.data['url']

但遗憾的是,两者似乎都不适合我

编辑:我正在尝试在自定义 guard

canActivate 函数 中获取这些数据

编辑 2.0:我尝试了下面的解决方案,但是在应用重定向到根路由之前,.then() 中的日志甚至没有被触发

canActivate() {
  return new Promise((resolve) => {
    this.router.events.subscribe(event => {
      console.log(event)
      if (event instanceof NavigationEnd) {
        this.url = this.route.root.firstChild.snapshot.data['url'];
        resolve();
      }
    });
  }).then(() => {
    console.log('in de tokenguard', this.token)
    if (!this.jwtHelper.isTokenExpired(this.token)) {
      return true;
    }
    return false;
  });
}

【问题讨论】:

    标签: angular angular7 angular-routing angular7-router angular-guards


    【解决方案1】:

    在您尝试获取参数的组件中: (我刚刚更新了我的答案)

    constructor(router:Router, route:ActivatedRoute) {
        router.events
          .filter(e => e instanceof NavigationEnd)
          .forEach(e => {
            console.log(route.root.firstChild.snapshot.data['url']);
        });
    }
    

    【讨论】:

    • 也尝试过这种方法,但遗憾的是它也没有用
    • 我通过尝试此解决方案更新了我的问题。如果我试图在组件中获取数据,这将起作用,但因为我想在警卫中使用它,所以我不能。 canActivate 函数在构造函数之前被触发,我尝试了多种方法来获取数据,但在应用程序重定向到根 url 之前我似乎仍然无法获取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2010-11-29
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多