angular – 无法解析AuthenticationService的所有参数:([object
发布时间:2020-12-17 17:51:32 所属栏目:安全 来源:网络整理
导读:我遇到了下一个错误,无法理解如何解决它. Can’t resolve all parameters for AuthenticationService: ([object Object],?,[object Object]) 我已经检查了几乎每个主题,并尝试了多种方法来解决它,但仍然无法在第二天击败它. 我试图像这样在appService中注入
我遇到了下一个错误,无法理解如何解决它.
我已经检查了几乎每个主题,并尝试了多种方法来解决它,但仍然无法在第二天击败它. 我试图像这样在appService中注入第一个authService但是得到了同样的错误 @Inject(forwardRef(() => AuthenticationService)) public authService: AuthenticationService 我检查了所有DI和服务内部的导入顺序,在我看来一切都是正确的 如果有人可以帮我处理它,我很感激. Angular 4.0.0 AuthService import { Injectable } from '@angular/core'; import {Http,Headers,Response} from '@angular/http'; import 'rxjs/add/operator/toPromise'; import {Observable} from 'rxjs/Rx'; import {AppServices} from "../../app.services"; import {Router} from "@angular/router"; @Injectable() export class AuthenticationService { public token: any; constructor( private http: Http,private appService: AppServices,private router: Router ) { this.token = localStorage.getItem('token'); } login(username: string,password: string): Observable<boolean> { let headers = new Headers(); let body = null; headers.append("Authorization",("Basic " + btoa(username + ':' + password))); return this.http.post(this.appService.api + '/login',body,{headers: headers}) .map((response: Response) => { let token = response.json() && response.json().token; if (token) { this.token = token; localStorage.setItem('Conform_token',token); return true; } else { return false; } }); } logout(): void { this.token = null; localStorage.removeItem('Conform_token'); this.router.navigate(['/login']); } } 应用服务 import {Injectable} from '@angular/core'; import {Headers,Http,RequestOptions} from '@angular/http'; import {Router} from "@angular/router"; import {AuthenticationService} from "./auth/auth.service"; import 'rxjs/add/operator/toPromise'; import {Observable} from 'rxjs/Rx'; @Injectable() export class AppServices { api = '//endpoint/'; public options: any; constructor( private http: Http,private router: Router,public authService: AuthenticationService // doesn't work // @Inject(forwardRef(() => AuthenticationService)) public authService: AuthenticationService // doesn't work either ) { let head = new Headers({ 'Authorization': 'Bearer ' + this.authService.token,"Content-Type": "application/json; charset=utf8" }); this.options = new RequestOptions({headers: head}); } // ==================== // data services // ==================== getData(): Promise<any> { return this.http .get(this.api + "/data",this.options) .toPromise() .then(response => response.json() as Array<Object>) .catch((err)=>{this.handleError(err);}) } 应用模块 import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import {BaseRequestOptions,HttpModule} from '@angular/http'; import { MaterialModule} from '@angular/material'; import {FlexLayoutModule} from "@angular/flex-layout"; import 'hammerjs'; import { routing,appRoutingProviders } from './app.routing'; import { AppServices } from './app.services'; import {AuthGuard} from "./auth/auth.guard"; import {AuthenticationService} from "./auth/auth.service"; import {AppComponent} from './app.component'; import {AuthComponent} from './auth/auth.component'; import {NotFoundComponent} from './404/not-found.component'; import { HomeComponent } from './home/home.component'; @NgModule({ declarations: [ AppComponent,AuthComponent,NotFoundComponent,HomeComponent ],imports: [ BrowserModule,BrowserAnimationsModule,FormsModule,HttpModule,routing,MaterialModule,FlexLayoutModule ],providers: [AppServices,AuthGuard,AuthenticationService],bootstrap: [AppComponent] }) export class AppModule { } 解决方法
AppServices和AuthenticationService之间存在循环依赖关系 – 这与Angular使用的构造函数注入无法实现.
你可以使用 export class AuthenticationService { public token: any; appService: AppServices; constructor( private http: Http,// private appService: AppServices,injector:Injector; private router: Router ) { setTimeout(() => this.appService = injector.get(AppServices)); this.token = localStorage.getItem('token'); } 另见DI with cyclic dependency with custom HTTP and ConfigService 要避免使用setTimeout,您还可以从AppService的构造函数中设置AuthenticationService.appService(或者相反) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- WebService开发(一) 如何使用Soap头 http://ww
- angularjs – angular-google-maps:找不到有效的
- 单元测试 – 如何在Play Framework 2.2.0 Scala(
- bootstrap3-dialog-master模态框使用详解
- TekTea’s Blog启用Show-UserAgent插件
- Bootstrap3.0学习第十八轮(JavaScript插件——下
- bash – 使用tee的wierdness:任何人都可以解释一
- java-Docker容器阻止中的Apache Batik转码器
- scala – 为什么IDEA在返回Future of None时会发
- webservice 应用
热点阅读