无法解析 AuthService 的所有参数:([object Object], ?) Angular 5.x

Can't resolve all parameters for AuthService: ([object Object], ?) Angular 5.x

我是 Angular 2-5 的新手,这是我第一次尝试在教程以外的任何地方设置服务。我收到一条 "can't resolve all parameters" 错误消息,我不知道哪些参数需要解析,为什么不需要。谁能帮帮我吗?我会尽可能多地包含代码。

auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { ClientJs } from 'clientjs';
import { AnyoneGuard } from '../components/guards/anyone.guard';
import { Constants } from '../app.config';


@Injectable()
export class AuthService {
  constructor(private http: HttpClient, private clientJs: ClientJs) { }

  ipAddress: any;
  user: any;

  public isLoggedIn() {
    return this.user.isAuthenticated;
  }

  getIp(login) {
    const client = new this.clientJs;
    const fingerprint = client.getFingerprint();
    console.log('FINGERPRINT: ' + fingerprint);
    this.ipAddress = fingerprint;
    if (login) { return fingerprint; }
    return '&IpAddress=' + fingerprint;
  }

  clearUser() {
    this.user = {
      username: null,
      authtoken: '',
      isAuthenticated: false,
      roles: null,
      ip: null,
      opName: null,
      opId: null,
      opMode: null,
      opPartition: null
    };
  }

  public login(username: string, password: string): Observable<boolean> {
    return this.http.post<any>(Constants.API_URL + 'authservice/login',
      { username: username, password: password, IpAddress: this.getIp(true) })
      .map(results => {
        let loggedIn = false;

        if (results) {
          const authToken = results.data.authToken + this.getIp(false);
          if (authToken) {
            loggedIn = true;
          }

          this.user = {
            username: results.data.username,
            authtoken: authToken,
            isAuthenticated: loggedIn,
            roles: results.data.roles,
            ip: results.data.ip,
            opName: results.data.opName,
            opId: results.data.opId,
            opMode: results.data.opMode,
            opPartition: results.data.opPartition
          };

          console.log('authService:Login: ' + JSON.stringify(this.user));

          // store user details and jwt token in local storage to keep user logged in between page refreshes
          localStorage.setItem('currentUser', JSON.stringify(this.user));
        }

        return loggedIn;

      });
  }

  public logout(): Observable<boolean> {

    return this.http.post<any>('http://localhost:58510//api/authservice/logout', { username: this.user.username })
      .map(results => {
        console.log('authService:Logout: ' + JSON.stringify(this.user));

        // remove user from local storage to log user out
        localStorage.removeItem('currentUser');

        this.clearUser();

        return false;
      });

  }
}

login.component.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { FormGroup, FormControl, Validators, FormBuilder } from '@angular/forms';
import { Constants } from '../../../app.config';
import { AuthService } from '../../../services/auth.service';
import { NGXLogger } from 'ngx-logger';

@Component({
    selector: 'app-login',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.less'],
    providers: [NGXLogger]
})

export class LoginComponent implements OnInit {

    copyright: string;
    version: string;

    form: FormGroup;

    username = new FormControl('', Validators.required);
    password = new FormControl('', Validators.required);

    constructor(fb: FormBuilder, private route: ActivatedRoute, private router: Router, private authenticationService: AuthService, private logger: NGXLogger) {
        this.form = fb.group({
            'username': this.username,
            'password': this.password // ['', Validators.required]
        });

        this.copyright = Constants.COPYRIGHT;
        this.version = Constants.VERSION;
    }

    onSubmit() {
        const isLoggedIn = this.authenticationService.login(this.form.value.username, this.form.value.password);

        if (isLoggedIn) {
            this.logger.info('logged in as : ' + this.form.value.username);
            // console.log('logged in as : ' + this.form.value.username);
        } else {
            this.logger.warn('logged failed');
            // console.log('login failed');
        }

        this.router.navigate(['/dashboard', this.form.value.username], { relativeTo: this.route });
    }

    ngOnInit() {
    }

}

app.module.ts

// Angular Imports
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CanActivate, CanActivateChild, CanDeactivate, Routes, RouterModule } from '@angular/router';
import { ReactiveFormsModule, FormControl, FormsModule } from '@angular/forms';
import { HttpClientModule, HttpClient } from '@angular/common/http';

// Components
import { AppComponent } from './app.component';
import { LoginComponent } from './views/noauth/login/login.component';
import { DashboardComponent } from './views/dashboard/dashboard.component';
import { FooterComponent } from './components/common/footer/footer.component';
import { CardholderComponent } from './views/cardholder/cardholder.component';
import { AccesslevelComponent } from './views/accesslevel/accesslevel.component';
import { SearchComponent } from './views/search/search.component';
import { ControlComponent } from './views/control/control.component';
import { ReportComponent } from './views/report/report.component';
import { BadgeComponent } from './views/badge/badge.component';
import { EditCardholderComponent } from './views/cardholder/edit-cardholder/edit-cardholder.component';
import { EditBadgeComponent } from './views/badge/edit-badge/edit-badge.component';
import { EditAccessLevelComponent } from './views/accesslevel/edit-access-level/edit-access-level.component';
import { EditControlComponent } from './views/control/edit-control/edit-control.component';

// Services
import { AuthService } from './services/auth.service';

// Guards
import { AnyoneGuard } from './components/guards/anyone.guard';
import { LoggedInGuard } from './components/guards/logged-in.guard';
import { AdminGuard } from './components/guards/admin.guard';

// Libs
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { LoggerModule, NgxLoggerLevel } from 'ngx-logger';
import { ClientJs} from 'clientjs';

// Pipes
import { KeepHtmlPipe } from './components/pipes/keep-html.pipe';

// Routes
import { ROUTES } from './app.routes';

// Layouts
import { BasicLayoutComponent } from './components/common/layouts/basic-layout/basic-layout.component';
import { BlankLayoutComponent } from './components/common/layouts/blank-layout/blank-layout.component';
import { TopNavigationLayoutComponent } from './components/common/layouts/top-navigation-layout/top-navigation-layout.component';
import { NavigationComponent } from './components/common/navigation/navigation.component';
import { TopNavbarComponent } from './components/common/top-navbar/top-navbar.component';
import { TopNavigationNavbarComponent } from './components/common/top-navigation-navbar/top-navigation-navbar.component';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    DashboardComponent,
    FooterComponent,
    CardholderComponent,
    AccesslevelComponent,
    SearchComponent,
    ControlComponent,
    ReportComponent,
    BadgeComponent,
    EditCardholderComponent,
    EditBadgeComponent,
    EditAccessLevelComponent,
    EditControlComponent,
    KeepHtmlPipe,
    BasicLayoutComponent,
    BlankLayoutComponent,
    TopNavigationLayoutComponent,
    NavigationComponent,
    TopNavbarComponent,
    TopNavigationNavbarComponent
  ],
  imports: [
    BrowserModule,
    ReactiveFormsModule,
    HttpClientModule,
    RouterModule.forRoot(ROUTES),
    NgbModule.forRoot(),
    LoggerModule.forRoot({serverLoggingUrl: '/api/logs', level: NgxLoggerLevel.DEBUG, serverLogLevel: NgxLoggerLevel.ERROR}),
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  providers: [
    AuthService,
    AdminGuard,
    AnyoneGuard,
    LoggedInGuard
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

Angular 无法注入 ClientJs 因为它不知道如何注入。

为了注入一些东西,它必须在某个地方的 providers 数组中,并且可能是 @Injectable()

如果你想注入它,你可以写一个class来包装它,或者简单地实例化它而不注入它