在canActivate中使用多个router.parseUrl()的正确方法?

时间:2019-05-31 04:35:17

标签: angular angular7

我在选路员方面遇到麻烦。验证引用键是否有效后,它不会根据其状态重定向到我期望的页面。我做了console.log()是为了跟踪出了什么问题,看到了日志,它似乎一直在循环。

注意:所有路由都具有此Route Guard。

我尝试删除所有条件,但是遇到相同的问题。我的猜测是,这是因为所有路线都设有该守卫。虽然,我真的需要这个。我该怎么办?

canActivate(route: ActivatedRouteSnapshot,
              state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {

    const ls = new SecureLS();
    let referenceKey = '*';
    try {
      referenceKey = ls.get('referenceKey').trim();
    } catch (error) {
      referenceKey = '*';
    }

    return this.referenceKeyService.verifyReferenceKey(referenceKey).pipe(
      map( res => {
        if (res.message === 'success') {
          const currentURL = window.location.pathname;
          if (res.data.status === 'Validated') {
            console.log('1: ' + currentURL);
            return currentURL === '/applicant/info' ? true : this.router.parseUrl('/applicant/info') ;
          } else if (res.data.status === 'In Progress') {
            console.log('2: ' + currentURL);
            return currentURL === '/exam/take' ? true : this.router.parseUrl('/exam/take');
          } else {
            return true;
          }
        } else {
          console.log('3');
          return this.router.parseUrl('/');
        }
      })
    );
  }

场景1: 用户转到applicant/info,但状态已经为“进行中”,因此,预计用户将被重定向到exam/take

但是,正在发生的事情没有发生。查看日志,似乎是无限循环,仅显示2: /applicant/info,这意味着它进入了条件2,但只是循环而不是重定向。

0 个答案:

没有答案