我使用AuthService和AuthGuard登錄/註銷用戶和防護路由。 AuthService用於AuthGuard以及LoginComponent中。 AuthGuard用於通過CanActivate保護路線。當我嘗試運行應用程序,我得到以下錯誤:角度2:未處理的承諾拒絕:沒有AuthService的提供者! ;區域:角度
zone.js:522 Unhandled Promise rejection: No provider for AuthService! ; Zone: angular ; Task: Promise.then ; Value: NoProviderError {__zone_symbol__error: Error: DI Error
at NoProviderError.ZoneAwareError
我已經檢查了LoginComponent和AuthGuard都導入AuthService並將它注入到通過構造的組件。我也檢查過,AuthService被導入到AppModule文件中並添加到providers數組中,因此它可以用作單例服務。
編輯以添加代碼示例:
我的應用模塊包含以下內容:
@NgModule({
imports: [...],
providers: [..., AuthService, AuthGuard, ...],
declarations: [..., LoginComponent, EntryComponent ...],
bootstrap: [EntryComponent]
})
export class AppModule {
}
AuthGuard:
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { ApiConfig } from '../Api';
import { AuthService } from './authservice';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
private authService: AuthService,
private router: Router,
private config: ApiConfig
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
console.log(this.isAuthenticated());
if (this.isAuthenticated()) {
if (this.config.defined) {
return true;
} else {
this.authService.setConfig();
return true;
}
} else {
this.router.navigate(['/Login']);
return false;
}
}
// Checks if user is logged in
isAuthenticated() {
return this.authService.userLoggedIn();
}
}
LoginComponent構造:
constructor(
private router: Router,
private notifications: Notifications,
private authService: AuthService
) {}
AuthService:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { ApiConfig } from '../Api';
@Injectable()
export class AuthService {
constructor(
private http: Http,
private router: Router,
private config: ApiConfig
) {
this.apiRoot = localStorage.getItem('apiRoot');
}
...
}
請提供代碼。具有構造函數的服務類以及您在何處以及如何提供並注入它們。 –
**應使用** providers **數組在** AppModule **中提供AuthService **,而不是導入。 – Mihailo
@Mihailo對不起,這是我的錯誤,意味着提供商數組。它不在進口數組中。我將編輯問題 – natmegs