Не удается разрешить все параметры для AuthGuard: в моей службе AuthGuard

У меня есть код для AuthGuard.service.ts следующим образом.

import { Injectable } from '@angular/core';
import { ActivatedRoute, CanActivate } from '@angular/router';
import { userLoginService } from './userLoginService';
export class AuthGuard implements CanActivate {
    constructor(private service: userLoginService) { }
    canActivate() {
        if (this.service.IsloggedIn()) {
            return true;
        } else {
            window.alert(' You are not logged in.Please LogIn ');
            return false;
        }
    }

}

В userLoginService.ts у меня есть следующий код

export class userLoginService {
    constructor() {}
    IsloggedIn(): boolean {
        return false;
    }
}

Я ввожу этот AuthGuard.service.ts в свой маршрут следующим образом. И я также указал это имя службы в провайдерах NgModule.

    const appRoutes: Routes = [
      { path: '', component: HomePageComponent, pathMatch: 'full' },
      { path: 'CartItems', component: CartItemsComponent, pathMatch: 'full', canActivate: [ AuthGuard ]},
    ];
@NgModule({
.
.
.
 providers: [UserInfoService , AuthGuard],
.
.
.

Теперь при выполнении этого кода я получаю следующую ошибку.

Uncaught Error: Can't resolve all parameters for AuthGuard: (?).
    at syntaxError (compiler.js:466)
    at CompileMetadataResolver._getDependenciesMetadata (compiler.js:15547)
    at CompileMetadataResolver._getTypeMetadata (compiler.js:15382)
    at CompileMetadataResolver._getInjectableMetadata (compiler.js:15362)
    at CompileMetadataResolver.getProviderMetadata (compiler.js:15722)
    at eval (compiler.js:15633)
    at Array.forEach (<anonymous>)
    at CompileMetadataResolver._getProvidersMetadata (compiler.js:15593)
    at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15161)
    at JitCompiler._loadModules (compiler.js:33542)

Подскажите, пожалуйста, где я допустил ошибку.


person roopteja    schedule 06.12.2017    source источник
comment
И где вы предоставляете UserLoginService? Это даже @Injectable?   -  person jonrsharpe    schedule 06.12.2017
comment
да, я сделал его инъекционным.   -  person roopteja    schedule 06.12.2017
comment
вы можете добавить весь файл для маршрутов (с импортом) @roopteja   -  person Alejandro Lora    schedule 06.12.2017
comment
Но на самом деле вы не показываете это или не включаете его в модуль. Приведите минимально воспроизводимый пример.   -  person jonrsharpe    schedule 06.12.2017
comment
Я не правильно дал оператор импорта. Теперь он работает нормально. Извините за беспокойство. И Спасибо за помощь.   -  person roopteja    schedule 06.12.2017
comment
@jonrsharpe Извините за беспокойство. Это мое плохо. Спасибо за помощь. Я позабочусь о том, чтобы больше так не делать.   -  person roopteja    schedule 06.12.2017


Ответы (3)


Я вижу, вы импортируете инъекционные препараты, но никогда их не используете !!

В вашем AuthGuard.service.ts. вы должны добавить: @Injectable() над своим классом, например:

@Injectable()
export class AuthGuard implements CanActivate {
    ...
}
person Paris Benamour    schedule 26.12.2017

Неперехваченная ошибка: не удается разрешить все параметры для AuthGuard: (?). при синтаксической ошибке (compiler.js:431) в CompileMetadataResolver._getDependenciesMetadata ..............

Я слишком долго сталкиваюсь с этой проблемой и просто решаю эту ошибку, следуя инструкциям.

Пожалуйста, добавьте эти две строки в ваш app.component.ts, и ваша проблема будет решена.

    import 'core-js/es6/reflect';

    import 'core-js/es7/reflect'; 
person Joni Kumar Sutradhor    schedule 09.01.2020

В моем случае я переместил файл защиты в другой каталог. Re ng serve решил мою проблему.

person Richard    schedule 12.03.2020