【问题标题】:Angular update 8.1 - circular dependency warningAngular 更新 8.1 - 循环依赖警告
【发布时间】:2019-11-30 05:12:55
【问题描述】:

自从更新到 Angular 8.1(8.0 有效)后,我收到了一个循环依赖警告,这对我来说并没有什么意义。

我有一个在某些组件中提供的可注入服务SelectService。该服务使用类SelectableItem。创建此类的实例时,服务本身作为参数传递。

item = new SelectableItem(
   ...
   this
);

SelectableItemclass 不可注入,如下所示。

export class SelectableItem {
    constructor(..., public selectService: SelectService) { }
}

现在自从 8.1 更新以来,我收到一个循环依赖警告:

selectable-item.ts -> select.service.ts -> selectable-item.ts

SelectableItem不是服务,怎么可能是循环依赖?

【问题讨论】:

  • 我认为 Angular CLI 刚刚好 :)
  • 我认为问题出在你如何导入类。您可以将其添加到您的问题中吗?
  • @MartinChoraine 导入是什么意思?这个类是用import { SelectableItem } from './../models/selectable-item'; 导入的,没什么特别的。
  • 好的,这就是我想要验证的。我在使用桶导入时已经遇到了这个问题。但这不是你的情况

标签: angular angular-dependency-injection


【解决方案1】:

你的SelectService 类应该是这样的。对SelectableItem 的依赖作为服务类的属性。

import "SelectAbleItem" from "../selectable-item.ts

@Injectable()
class SelectService {
}

private selectItem: SelectItem;
public get SelectItem():SelectItem { return this.selectItem; }

现在在SelectableItem 的构造函数中不要注入SelectService,而是使用注入器来提供它。

class SelectableItem {
  constructor() {
    const injector = Injector.create([{provide: SelectService, useClass: SelectService, deps: [SelectableItem]]};
    const selectService = injector.get(SelectService);
  }
}

我从herehere 获得了一些代码。该代码未经测试,可能包含一个小故障,但它应该为您指明正确的方向。

【讨论】:

  • 我在使用 Injector 时仍然遇到同样的错误。代码是here,这不是我的仓库,我只是想修复它。
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2020-03-04
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2021-01-08
相关资源
最近更新 更多