警告检测到循环依赖-Angular Cli

Dul*_*nga 9 warnings circular-dependency angular-cli angular

https://github.com/angular/angular-cli/pull/6813添加了关于循环依赖项的警告,我知道我可以使用“ showCircularDependencies”关闭所有警告:false。但是我宁愿保持循环依赖警告。有没有一种模式可以让我修复下面的用例,还是有一种方法可以专门禁用特定文件上的循环依赖插件?

最简单的情况是,如果我有3个文件:

表格模型

import { CustomModel } from './custom.model';
import { CustomForm } from './custom.form';

export class Forms {
  items: CustomForm[] = [];
  public constructor(models?: CustomModel[]) {
    models.forEach(model => this.items.push(new CustomForm(model)));
  }
}
Run Code Online (Sandbox Code Playgroud)

custom.model.ts

export class CustomModel {
  nestedModels: CustomModel[];    
}
Run Code Online (Sandbox Code Playgroud)

custom.form.ts

import { Forms } from './forms.model';
import { CustomModel } from './custom.model';

export class CustomForm {
  nestedForms: Forms;

  constructor(model: CustomModel) {
    this.nestedForms = new Forms(model.nestedModels);
  }
}
Run Code Online (Sandbox Code Playgroud)

这将导致以下警告:

WARNING in Circular dependency detected:
src\app\models\custom.form.ts -> src\app\models\forms.model.ts -> src\app\models\custom.form.ts

WARNING in Circular dependency detected:
src\app\models\forms.model.ts -> src\app\models\custom.form.ts -> src\app\models\forms.model.ts
Run Code Online (Sandbox Code Playgroud)

在我的实际应用中,由于这种模式,大约有20-30条警告。我认为底层插件https://github.com/aackerman/circular-dependency-plugin支持排除模式,但是我不确定是否有办法通过angular-cli使用它。

Viv*_*shi 9

问题很明显:

您正在使用custom.model.tscustom.form.ts

而且custom.form.ts进入custom.model.ts

这被称为CircularDependencies,那不好。

解决方案:

只需import { CustomForm } from './custom.form';custom.model.ts

  • 你能解释为什么循环依赖是“不好的”吗?我可以在一个文件中有两个函数,其中每个函数在某些情况下可以调用另一个函数。这也是一个循环依赖关系(每个函数都需要另一个函数存在),但是我还没有看到现代的编译器会抱怨这种情况... (4认同)
  • 抱歉,在创建此SO问题时导入是偶然的。我已经从原始问题中修改了该行。在这种情况下,删除导入无济于事。循环依赖关系是由对新Forms()和新CustomForms()的调用引起的。 (2认同)

crd*_*deu 6

您可以将 forms.model.ts 和 custom.form.ts 的代码放在同一个文件中,这将消除循环依赖。

  • 这就是 Angular Material 组件库对其 Stepper 和 Step 类所做的事情,因为它们相互引用。 (2认同)