https://github.com/angular/angular-cli/pull/681 循環依存関係に関する警告を追加し、 "showCircularDependencies"を使用してすべての警告をオフにできることを知っています。 。しかし、循環依存の警告はそのままにしておきます。 以下のユースケースを修正できるパターンがありますか、または特定のファイルで循環依存プラグインを具体的に無効にする方法がありますか?
最も簡単なシナリオは、3つのファイルがある場合です。
forms.model.ts
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)));
}
}
custom.model.ts
export class CustomModel {
nestedModels: CustomModel[];
}
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);
}
}
これにより、次の警告が発生します。
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
私の実際のアプリでは、この同じパターンのために約20〜30の警告があります。基礎となるプラグイン https://github.com/aackerman/circular-dependency-plugin は除外パターンをサポートしていると思いますが、angular-cliでこれを使用する方法があるかどうかはわかりません。
問題は明らかです:
custom.model.ts
をcustom.form.ts
に使用しています
custom.form.ts
をcustom.model.ts
に、
これはCircularDependencies
と呼ばれ、良くありません。
解決策:
import { CustomForm } from './custom.form';
からcustom.model.ts
を削除するだけです
Forms.model.tsはcustom.form.tsを使用し、custom.form.tsはforms.model.tsを使用します。これが依存サイクルの原因です。モデルを変更してこの関係を削除してください。
CustomFormがなく、FormsがないためCustomFormを作成できない場合、どのようにFormsを作成しますか?(はい、nullまたはundefinedを使用できますが、これはいです)
forms.model.ts
import { CustomModel } from './custom.model';
import { CustomForm } from './custom.form';
export class Forms {
items: CustomForm[] = []; /** refences to CustomForm **/
public constructor(models?: CustomModel[]) {
models.forEach(model => this.items.Push(new CustomForm(model)));
}
}
custom.form.ts
import { Forms } from './forms.model';
import { CustomModel } from './custom.model';
export class CustomForm {
nestedForms: Forms; /** refences to Forms **/
constructor(model: CustomModel) {
this.nestedForms = new Forms(model.nestedModels);
}
}
同じファイルにforms.model.tsとcustom.form.tsのコードを含めることができます。これにより、循環依存関係が削除されます。