【问题标题】:Angular 2 can't resolve all parameters for serviceAngular 2 无法解析服务的所有参数
【发布时间】:2017-11-06 09:17:54
【问题描述】:

我有两个服务:LoginService 和 UserService。我正在尝试将 UserService 注入 LoginService 并且该应用程序将无法运行。

在控制台中,我有错误:

错误:无法解析 UserService 的所有参数:([object Object], ?)。在 SyntaxError.ZoneAwareError (http://localhost:4200/polyfills.bundle.js:7156:33) 在 SyntaxError.BaseError [作为构造函数]

这是我的登录服务:

import {UserService} from '../services/user.service';
@Injectable()
export class LoginService {

  constructor(public _http: Http,public us: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 { }

【问题讨论】:

  • 请添加 Angular 模块和您的 UserService 代码。
  • 你刚刚创建了一个循环依赖

标签: angular service inject


【解决方案1】:

你有一个循环引用。

您的UserService 需要LoginService,而LoginService 需要UserService

删除其中一个依赖项。例如。重构您的 UserService 使其不需要对 LoginService 的引用

【讨论】:

  • 没错,解决办法是什么?
  • 删除依赖项之一。例如。重构您的 UserService,使其不需要对 LoginService 的引用
  • 这是一种可能的解决方案?
  • 是的 - 这是唯一的解决方案。
【解决方案2】:

正如其他帖子提到的循环依赖...您可以考虑使用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";
  }
}

您可以查看this page了解更多详情。

【讨论】:

  • 您能否在问题中包含论坛帖子的必要部分?始终建议包含实际答案,而不是通过链接引用
  • 我认为应该更像这样:constructor(@Inject(forwardRef(() =&gt; NameService)) nameService: NameService) { this.name = nameService.getName(); }
猜你喜欢
  • 2018-12-06
  • 2018-07-22
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2017-04-24
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多