StaticInjectorError(平台:核心)[AuthGuardSuperAdmin]:NullInjectorError:AuthGuardSuperAdmin没有提供程序

时间:2018-10-10 02:29:21

标签: angular typescript

import { Injectable, inject, OnInit } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
import { LoginService } from './../login/login.service';
import { UserService } from './../user/user.service';

@Injectable()


export class AuthGuardSuperAdmin implements CanActivate {

    constructor(public loginService: LoginService, private router: Router, private userService: UserService){ }
    loggedIn; userData; id;

    getData(){
        this.id = JSON.parse(localStorage.getItem('user'));
        this.userService.userSelectOne(this.id).subscribe(data =>{
            this.userData = data;
        });
    }

    canActivate(){
        if(this.loginService.loggedIn()){
            if(this.userData[0]['userStatus']){
                return true;
            } else {
                this.router.navigate(['/product']);
                return false;
            }

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

    ngOnInit(){
        this.getData();
        this.canActivate();
    }
}

我想使用UserService来标识用户的详细信息,下面的代码表示角度路由中的canActivate。但是出现一些错误,我不知道为什么吗?我想根据用户的状态限制用户访问路由。管理员或superAdmin

const appRoutes: Routes = [
  { 
    path: 'user', 
    component: UserComponent,
    canActivate: [AuthGuardSuperAdmin] 
  },
]

2 个答案:

答案 0 :(得分:0)

您需要将 AuthGuardSuperAdmin 导入 app.module.ts

的提供程序内
 providers: [AuthGuardSuperAdmin ]

答案 1 :(得分:0)

如果您使用的是Angular 6,只需更改以下内容即可:

@Injectable()

收件人:

@Injectable({providedIn: 'root'})

无需其他更改。这将按需注入服务,而无需将其添加到providers数组。