254 votes

Créer un composant et l'ajouter à un module spécifique avec Angular-CLI

Je commence à utiliser angular-cli et j'ai déjà lu beaucoup pour trouver une réponse à ce que je veux faire... sans succès, alors je suis venu ici.

Existe-t-il un moyen de créer un composant pour un nouveau module ?

par exemple : ng g module newModule

ng g component newComponent (comment ajouter ce composant à newModule ??)

parce que le comportement par défaut d'angular-cli est de mettre tous les nouveaux composants à l'intérieur de app.module . J'aimerais pouvoir choisir l'emplacement de mon composant, afin de pouvoir créer des modules séparés et de ne pas avoir tous mes composants à l'intérieur. app.module . Est-il possible de le faire en utilisant angular-cli ou dois-je le faire manuellement ?

334voto

Alexander Ciesielski Points 5397

Pour créer un composant dans le cadre d'un module, vous devez

  1. ng g module newModule pour générer un module,
  2. cd newModule pour changer de répertoire dans le newModule dossier
  3. ng g component newComponent pour créer un composant en tant qu'enfant du module.

MISE À JOUR : Angular 9

Maintenant, le dossier dans lequel vous vous trouvez lorsque vous générez le composant n'a plus d'importance.

  1. ng g module NewMoudle pour générer un module.
  2. ng g component new-module/new-component pour créer NewComponent.

Remarque : Lorsque le CLI d'Angular voit new-module/new-component, il comprend et traduit le cas pour correspondre à new-module -> NewModule et new-component -> NewComponent. Cela peut être déroutant au début, donc la solution la plus simple est de faire correspondre les noms dans #2 avec les noms de dossier pour le module et le composant.

102 votes

Vous pouvez également rester dans la Racine du projet et préfixer le composant avec le nom du module ng g component moduleName/componentName .

3 votes

Avec la version 1.6.8 d'Angular CLI, je recevais toujours l'erreur 'specified module doesn't exists', lorsque je séparais un module existant. Cela a fonctionné lorsque j'ai essayé la commande suivante : ng generate service service1 --module=module1/module1.module.ts . Note : le nom de mon service est service1 et le nom de mon module est module1

0 votes

La réponse de @JayChase est la meilleure option.

247voto

ng g component nameComponent --module=app.module.ts

21 votes

Les autres réponses fonctionnent, mais celle-ci est la plus efficace. Cela vaut la peine d'ajouter --dry-run à la fin juste pour voir ce qui sera affecté, c'est un bon contrôle de la santé mentale.

3 votes

ng g component path/to/myComponent --module=app.module.ts --dry-run est une commande très utile ; juste pour s'assurer que votre composant est créé dans le bon répertoire.

1 votes

Vous pouvez utiliser un chemin relatif dans l'option module, comme suit ng g component componentName --module=../../sibling/path/custom.module.ts --dry-run

79voto

Diskdrive Points 2594

Je ne sais pas si la réponse d'Alexander Ciesielski était peut-être correcte au moment de la rédaction, mais je peux vérifier que cela ne fonctionne plus. Le répertoire du projet dans lequel vous exécutez le CLI Angular n'a pas d'importance. Si vous tapez

ng g component newComponent

il va générer un composant et l'importer dans le fichier app.module.ts

La seule façon d'utiliser CLI pour l'importer automatiquement dans un autre module est de spécifier

ng g component moduleName/newComponent

où moduleName est un module que vous avez déjà défini dans votre projet. Si le moduleName n'existe pas, il placera le composant dans le répertoire moduleName/newComponent mais l'importera quand même dans app.module.

2 votes

C'était la bonne réponse pour moi à l'époque ça fonctionne correctement. Je crée une demande de retrait pour ajouter cette information à la documentation. L'un de ses contributeurs me demande de supprimer la partie cd-ing au final, ce sera 1. ng g module newModule 2. ng g component new-module/newComponent selon lui, devrait être new-module au lieu de newModule

0 votes

Juste pour signaler que j'utilise la technique d'Alexander Ciesielski et que cela fonctionne comme prévu. Je dois noter que je n'avais pas besoin de créer un composant, mais simplement de créer un dossier. J'ai donc simplement mkdir un dossier, puis exécute le composant newComponent à l'intérieur du dossier nouvellement créé.

3 votes

Je dirais que la réponse complète est ng g component moduleName/newComponent -m moduleName

52voto

cobolstinks Points 2184

Je n'ai pas trouvé de réponse qui montre comment utiliser le cli pour générer un composant à l'intérieur d'un dossier de module de premier niveau, et aussi pour que le composant soit automatiquement ajouté à la collection de déclarations du module.

Pour créer le module, exécutez ceci :

ng g module foo

Pour créer le composant à l'intérieur du dossier du module foo et l'ajouter à la collection de déclarations du fichier foo.module.ts, exécutez cette procédure :

ng g component foo/fooList --module=foo.module.ts

Et la cli va échafauder le module et le composant comme ceci :

enter image description here

--EDIT la nouvelle version de la cli angulaire se comporte différemment. La 1.5.5 ne veut pas de nom de fichier de module, donc la commande avec la v1.5.5 devrait être

ng g component foo/fooList --module=foo

2 votes

Yay pour le --module l'argument ; le docs dire "Permet la spécification du module déclarant" ; j'ajouterais --module précise quel existant Le module doit être modifié pour importer le module que vous sur le point de créer

2 votes

@TheRedPea Je pense que vous vouliez dire " --module spécifie quel module existant doit être modifié pour importer le composant que vous êtes ... ".

0 votes

Oui, vous avez raison ! Module existant modifié en référence au nouveau composant

17voto

user2662006 Points 1405

Vous pouvez essayer la commande ci-dessous, qui décrit la,

ng -> Angular 
g  -> Generate
c  -> Component
-m -> Module 

Alors votre commande sera comme :

ng g c user/userComponent -m user.module

0 votes

Cela fonctionne pour angular 12, il n'y a pas besoin de .ts après .module donc c'est parfait. et comme Tony l'a mentionné, ça vaut la peine de rajouter --dry-run à la fin juste pour voir ce qui sera affecté, c'est un bon contrôle de la santé mentale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X