首页 > 解决方案 > Angular 更新 8.1 - 循环依赖警告

问题描述

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

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

item = new SelectableItem(
   ...
   this
);

该类SelectableItem不是可注入的,看起来像这样。

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

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

可选项目.ts -> select.service.ts -> 可选项目.ts

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

标签: angularangular-dependency-injection

解决方案


你的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);
  }
}

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


推荐阅读