我有一种明显的缺失。
在我的LoginComponent中提供AuthenticationService时,出现错误can't resolve all parameters for AuthenticationService
。
从Stackoverflow上类似文章的提示中,我猜想它与循环依赖有关,但我不知道我的位置在哪里。
AuthenticationService
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
Injectable( { providedIn: 'root' } );
export class AuthenticationService {
constructor( private http: HttpClient ) {
}
logIn( email: string, password: string ): Observable<any> {
const authKey = btoa( `${email}:${password}` );
const headers = new HttpHeaders().set( 'Authorization', `basic ${authKey}` );
const params = new HttpParams().set( 'username', email );
return this.http.get( 'user', { headers, params } ).pipe( map( ( user: any ) => {
if ( user ) {
localStorage.setItem( 'currentUser', JSON.stringify( { user: { authKey } } ) );
}
} ) );
}
logOut() {
localStorage.removeItem( 'currentUser' );
}
}
如果从构造函数中删除了HttpClient
,则它可以工作。因此,这与此有关。
我有另一个也使用HttpClient
的服务,但是在开发的这一点上,该服务尚未使用。
AuthenticationService是在AppModule中提供的(这与我对providedIn: 'root'
的理解背道而驰,我认为它将自动在根目录中提供它,因此我不必显式地“提供”它。我得到了静态注入错误,如果我没有)。
我试图通过从使用该服务的组件内部提供它来进行切换,但无济于事。
谁可以在这里帮助我?
请告诉我是否需要提供更多代码。
谢谢。
答案 0 :(得分:1)
您是否在应用程序模块中包含HttpClientModule?
答案 1 :(得分:1)
我有同样的问题,
如果是,请确保已将HttpClientModule
导入了app.module中,并且仍然存在该错误,请删除{ providedIn: 'root' }
并将其介绍给无处不在的提供者(组件,服务等)
您要致电此服务。