无法解析身份验证服务(Angular 7)的所有参数

时间:2019-10-20 15:55:13

标签: angular

我有一种明显的缺失。
在我的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'的理解背道而驰,我认为它将自动在根目录中提供它,因此我不必显式地“提供”它。我得到了静态注入错误,如果我没有)。 我试图通过从使用该服务的组件内部提供它来进行切换,但无济于事。

谁可以在这里帮助我?
请告诉我是否需要提供更多代码。
谢谢。

2 个答案:

答案 0 :(得分:1)

您是否在应用程序模块中包含HttpClientModule?

答案 1 :(得分:1)

我有同样的问题, 如果是,请确保已将HttpClientModule导入了app.module中,并且仍然存在该错误,请删除{ providedIn: 'root' } 并将其介绍给无处不在的提供者(组件,服务等) 您要致电此服务。