Не удается разрешить все параметры для 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 {
}

И я получаю эту ошибку:

введите здесь описание изображения

Я что-то пропустил? Где источник этой ошибки?

EDIT: я использую 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: '', redirectTo: 'list', pathMatch: 'full'},
      {path: 'list', component: NotificationListComponent, canActivate: ['CannotBeActivated']},
      {path: ':id', component: NotificationDetailComponent, 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"
    ]
  }
}

person Laiso    schedule 16.11.2017    source источник
comment
Можешь опубликовать свой tsconfig.json?   -  person DGarvanski    schedule 16.11.2017
comment
Окей, я обновил свой пост.   -  person Laiso    schedule 16.11.2017
comment
Вы уверены, что существует @Injectable до того, как класс экспорта AuthGuard реализует CanActivate?   -  person Faly    schedule 16.11.2017


Ответы (1)


Вы только что не поставили @Injectable() перед службой AuthGuard.

person Faly    schedule 16.11.2017
comment
Я совсем забыл об этом. Благодарю вас! - person Laiso; 16.11.2017