微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angular – 无法解析AuthGuard的所有参数

我有这个AuthGuard:

export class AuthGuard implements CanActivate {

  constructor (private router: Router) {}

  canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if (localStorage.getItem('token')) {
      return true;
    }

    this.router.navigate(['/login']);
    return false;
  }
}

我在AppModule中提供了它:

@NgModule({
  declarations: [/*...*/],imports: [NotificationRoutingModule],providers: [AuthService,AuthGuard],bootstrap: [AppComponent]
})
export class AppModule {
}

我试图在我的路由模块中使用这个后卫,如下所示:

const routes = [
  {
    path: 'notification',component: NotificationRootComponent
    children: [
      {path: '',redirectTo: 'list',pathMatch: 'full'},{path: 'list',component: NotificationListComponent,canActivate: [AuthGuard]},{path: ':id',component: NotificationDetailComponent,canActivate: [AuthGuard]}
    ]
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],exports: [RouterModule],declarations: []
})
export class NotificationRoutingModule {
}

我收到这个错误

enter image description here

我错过了什么?这个错误的来源在哪里?

编辑:
我使用的是Angular 4.4.6

当我使用基本路线防护并且更新路线配置时,它工作正常:

@NgModule({
  declarations: [],imports: [],providers: [
    {
      provide: 'CannotBeActivated',useValue: () => {
        return false;
      }
    }
  ],bootstrap: [AppComponent]
})
export class AppModule {
}


const routes = [
  {
    path: 'notification',component: NotificationRootComponent,children: [
      {path: '',canActivate: ['CannotBeActivated']},canActivate: ['CannotBeActivated']}
    ]
  }
];

**我的tsconfig.json:**

{
  "compileOnSave": false,"compilerOptions": {
    "outDir": "./dist/out-tsc","sourceMap": true,"declaration": false,"moduleResolution": "node","emitDecoratorMetadata": true,"experimentalDecorators": true,"target": "es5","typeRoots": [
      "node_modules/@types"
    ],"lib": [
      "es2017","dom"
    ]
  }
}

解决方法

您只是错过了在AuthGuard服务之前放置@Injectable()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐