web-dev-qa-db-fra.com

AVERTISSEMENT dans Dépendance circulaire détectée - Cli angulaire

https://github.com/angular/angular-cli/pull/6813 Ajout d'avertissements pour les dépendances circulaires et je sais que je peux désactiver tous les avertissements en utilisant "showCircularDependencies": false. Mais je préfère garder les avertissements de dépendance circulaires. Existe-t-il un modèle qui permette de résoudre le cas d'utilisation ci-dessous ou existe-t-il un moyen de désactiver spécifiquement le plug-in de dépendance circulaire sur un fichier particulier?

Le scénario le plus simple est si j'ai 3 fichiers:

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

Cela provoque les avertissements suivants:

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

Dans mon application actuelle, il y a environ 20-30 avertissements en raison de ce même schéma. Je pense que le plugin sous-jacent https://github.com/aackerman/circular-dependency-plugin supporte les motifs exclus, mais je ne suis pas sûr qu’il soit possible de l’utiliser via le paramètre angular-cli.

3
Dulitha Ranatunga

Le problème est clair:

Vous utilisez custom.model.ts dans custom.form.ts

et aussi custom.form.ts dans custom.model.ts

Ceci s'appelle CircularDependencies et ce n'est pas bon.

Solution :  

Il suffit de retirer import { CustomForm } from './custom.form'; de custom.model.ts

2
Vivek Doshi

Vous pouvez avoir le code de forms.model.ts et custom.form.ts dans le même fichier et cela supprimera la dépendance circulaire.

1
Carlos Rincones

Forms.model.ts utilise custom.form.ts, alors que custom.form.ts utilise forms.model.ts, cause du cycle de dépendance, supprimez cette relation en modifiant votre modèle.

Comment créez-vous des formulaires quand vous n'avez pas de CustomForm, et vous ne pouvez pas créer CustomForm, parce que vous n'avez pas de formulaires? (Oui, vous pouvez utiliser null ou undefined mais c'est moche)

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);
  }
}
0
G.Vitelli