繁体   English   中英

在警卫服务中使用路由参数

[英]Use route parameters in guard service

我正在尝试检查用户是否可以根据路由访问某个组件。 所以我需要在守卫服务中获取一个路由参数。 我在其他主题中读到,当您在目标页面加载之前需要路由信息时,您需要ActivatedRouteSnapshot

那(仍然)正确吗? 当我尝试使用这种方法时,我得到了“没有 ActivatedRouteSnapshot 的提供者!” 错误,这让我根据这篇文章重新使用 ActivatedRoute

import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';
import { tap } from 'rxjs/operators';
import { EventManagerService } from './services/database/event/eventmanager.service';

@Injectable()
export class ManagerGuard implements CanActivate {

  constructor(private router: Router, private eventManagerService: EventManagerService, private route: ActivatedRouteSnapshot) {
  }

  canActivate() {
    const eventId = this.route.paramMap.get('eventId');
    return this.eventManagerService.getManagerProfile(eventId)
      .pipe(
        tap(authenticated => {
          if (!authenticated) {
            this.router.navigate(['manager']);
          }
        }),
      );
  }
}

我的错误是我在构造函数中使用了路由和状态,而它已经在canActivate接口中提供

import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
import { tap } from 'rxjs/operators';
import { EventManagerService } from './services/database/event/eventmanager.service';

@Injectable()
export class ManagerGuard implements CanActivate {

  constructor(private router: Router, private eventManagerService: EventManagerService,) {
  }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM