LoginServiceとUserServiceの2つのサービスがあります。 UserServiceをLoginServiceに挿入しようとしていますが、アプリは実行されません。
コンソールにエラーがあります:
エラー:UserServiceのすべてのパラメーターを解決できません:([オブジェクトオブジェクト] 、?)。 SyntaxError.ZoneAwareError( http:// localhost:4200/polyfills.bundle.js:7156: )at SyntaxError.BaseError [コンストラクターとして]
これは私のLoginServiceです:
import {UserService} from '../services/user.service';
@Injectable()
export class LoginService {
constructor(public _http: Http,public us:UserService) {
}
およびUserService:
@Injectable()
export class UserService {
constructor(private _http: Http , public _ls: LoginService) {
}
角度モジュール:
import {LoginService} from './services/login.service';
import {UserService} from './services/user.service';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
],
exports: [BrowserModule, SlimLoadingBarModule],
providers: [UserService, LoginService, appRoutingProviders],
bootstrap: [AppComponent]
})
export class AppModule { }
循環参照があります。
UserService
にはLoginService
が必要で、LoginService
にはUserService
が必要です。
依存関係の1つを削除します。例えば。 LoginServiceへの参照を必要としないようにUserServiceをリファクタリングします
他の投稿者が循環依存関係に言及したように... forwardRef()
を使用してこの問題を解決することを検討できます。
簡単に言えば、実際のサービスの代わりに前方参照を注入できます。そのため、サービスインジェクションは延期されます。したがって、循環依存関係は解決されます。
コードサンプルは次のとおりです。
import {Component, Inject, forwardRef} from '@angular/core';
@Component({
selector: 'my-app',
template: '<h1>Favourite framework: {{ name }}</h1>'
})
class AppComponent {
name: string;
constructor(@Inject(forwardRef(() => NameService)) nameService) {
this.name = nameService.getName();
}
}
class NameService {
getName () {
return "Angular";
}
}
詳細については、 このページ を確認してください。