11

我有一个 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)

请让我知道我在哪里犯了错误。

4

3 回答 3

30

我看到你导入 Injectable 但你从不使用它!

在您的 AuthGuard.service.ts 中。您应该@Injectable()在您的班级上方添加:

@Injectable()
export class AuthGuard implements CanActivate {
    ...
}
于 2017-12-26T00:27:01.410 回答
0

就我而言,我将保护文件移动到另一个目录。Re ng serve 解决了我的问题。

于 2020-03-12T16:53:40.240 回答
0

未捕获的错误:无法解析 AuthGuard 的所有参数:(?)。在 CompileMetadataResolver._getDependenciesMetadata 处的 syntaxError (compiler.js:431) ....

我面临这个问题太久了,只需通过以下方法解决此错误。

请在您的“app.component.ts”中添加这两行,您的问题将得到解决。

    import 'core-js/es6/reflect';

    import 'core-js/es7/reflect'; 
于 2020-01-09T04:50:12.120 回答