使用Angular-CLI为特定模块创建组件

Elm*_*tas 127 typescript angular-cli angular

我开始使用angular-cli,我已经阅读了很多内容,以便找到关于我想做什么的答案......没有成功,所以我来到这里.

有没有办法为新模块创建组件?

例如: ng g module newModule

ng g component newComponent (如何将此组件添加到newModule ??)

因为angular-cli默认行为是将所有新组件放入其中app.module.我想选择我的组件的位置,以便我可以创建单独的模块,并且不会将所有组件放在里面app.module.使用angular-cli可以做到这一点,还是我必须手动执行此操作?

Ale*_*ski 170

要创建组件作为模块的一部分,您应该

  1. ng g module newModule 生成一个模块,
  2. cd newModule将目录更改为该newModule文件夹
  3. ng g component newComponent 创建组件作为模块的子级.

  • 您还可以保留项目根目录,并使用模块名称"ng g component moduleName/componentName"为组件添加前缀. (73认同)
  • 这将在指定目录中创建一个新组件,但不会在模块中注册它。它将在 app.module 中注册它。您需要使用 `--module` 选项指定模块,例如:`ng g component <your component> --module=<your module name>` (15认同)
  • 在使用Angular CLI版本1.6.8时,当我分割现有模块时,总是会出现错误消息:“指定的模块不存在”。当我尝试以下命令时,它起作用了:* ng生成服务service1 --module = module1 / module1.module.ts *。注意:我的服务名称是* service1 *,我的模块名称是* module1 * (3认同)
  • 截止到10月6日,Angular 6 (2认同)
  • 过时的。Angular 6并不依靠文件夹结构来查看组件所在的模块。两个模块可以位于同一目录中。@daniel的答案/sf/answers/3136841011/适用于Angular 6。 (2认同)

小智 107

ng g component nameComponent --module=app.module.ts
Run Code Online (Sandbox Code Playgroud)

  • 其他答案有效,但这是最有效的。值得在其末尾添加`--dry-run`,只是为了看看会受到什么影响,这是一个不错的检查 (3认同)
  • `ng g component path/to/myComponent --module=app.module.ts --dry-run` 是一个非常有用的命令;只是为了确保您的组件是在正确的目录中创建的。 (3认同)

Dis*_*ive 69

不确定Alexander Ciesielski在撰写本文时的答案是否正确,但我可以证实这不再适用.运行Angular CLI的项目中的哪个目录无关紧要.如果你输入

ng g component newComponent
Run Code Online (Sandbox Code Playgroud)

它将生成一个组件并将其导入app.module.ts文件

使用CLI自动将其导入另一个模块的唯一方法是指定

ng g component moduleName/newComponent
Run Code Online (Sandbox Code Playgroud)

其中moduleName是您已在项目中定义的模块.如果moduleName不存在,它会将组件放在moduleName/newComponent目录中,但仍然将其导入app.module

  • 对我来说这是正确的答案..它正常工作.我创建了一个拉取请求,将此信息添加到文档中.其中一个贡献者要求我删除cd-ing part ..最后将是1.`ng g module newModule` 2.`ng g component new-module/newComponent`根据他应该是new-module而不是newModule (2认同)
  • 我会说完整的答案是`ng g component moduleName/newComponent -m moduleName` (2认同)

cob*_*nks 29

我没有找到一个答案,显示如何使用cli在顶级模块文件夹中生成组件,并且还让组件自动添加模块的声明集合.

要创建模块,请运行以下命令:

ng g module foo
Run Code Online (Sandbox Code Playgroud)

要在foo模块文件夹中创建组件并将其添加到foo.module.ts的声明集合,请运行以下命令:

ng g component foo/fooList --module=foo.module.ts
Run Code Online (Sandbox Code Playgroud)

并且cli将支持模块和组件,如下所示:

在此输入图像描述

--EDIT新版本的角度cli表现不同.1.5.5不需要模块文件名,因此v1.5.5的命令应该是

ng g component foo/fooList --module=foo
Run Code Online (Sandbox Code Playgroud)

  • 赞成“--module”参数;[文档](https://github.com/angular/angular-cli/wiki/generate-module) 说“允许声明模块的规范”。; 我会添加“--module”指定哪个*现有*模块应该被*修改*以导入您*即将创建*的模块 (2认同)
  • @TheRedPea我相信您的意思是“ --module指定应修改哪个现有模块以导入您要使用的组件...” (2认同)

use*_*006 12

你可以尝试下面的命令,它描述了,

ng -> Angular 
g  -> Generate
c  -> Component
-m -> Module 
Run Code Online (Sandbox Code Playgroud)

然后你的命令就像:

ng g c user/userComponent -m user.module
Run Code Online (Sandbox Code Playgroud)


小智 7

这对我有用:

1 -->  ng g module new-module

2 -->  ng g c new-module/component-test --module=new-module/new-module.module.ts
Run Code Online (Sandbox Code Playgroud)

如果要生成没有其目录使用--flat 标志的组件.


She*_*vid 7

对于Angular v4和更高版本,只需使用:

ng g c componentName -m ModuleName
Run Code Online (Sandbox Code Playgroud)

  • 像魅力一样工作!例如,如果你的模块文件是 `user-settings.module.ts` 并且你想添加一个组件 `public-info` 那么命令将是:`ng gc PublicInfo -m user-settings` (2认同)

小智 7

我在 Angular CLI 版本 8.3 中使用了以下命令,它通过生成在特定模块中声明的特定组件来工作。

  1. 如果我们需要生成组件,则移动到特定文件夹

    cd <component-path>

  2. 调用下面的生成命令

    ng g c <component-name> --module=<module-name>

例子

 `ng g c login --module= app`
Run Code Online (Sandbox Code Playgroud)


小智 6

首先生成模块:

ng g m moduleName --routing
Run Code Online (Sandbox Code Playgroud)

这将创建一个 moduleName 文件夹,然后导航到模块文件夹

cd moduleName
Run Code Online (Sandbox Code Playgroud)

然后生成组件:

ng g c componentName --module=moduleName.module.ts --flat
Run Code Online (Sandbox Code Playgroud)

使用 --flat 不在模块文件夹内创建子文件夹


Jun*_*aid 6

TL;DR
试试这个。通过模块的文件名指定模块名称(不包括.ts扩展名)

ng g c components/path-to-a-folder/component-name --module=app.module
Run Code Online (Sandbox Code Playgroud)

笔记:

  • ng g c是缩写ng generate component
  • 如果您希望将组件添加到不同的模块中,假设在文件中 collection.module.ts,然后使用--module=collection.module 而不是--module=app.module& 您应该可以开始了。


Elh*_*kim 5

  1. 首先,通过执行生成模块。
ng g m modules/media
Run Code Online (Sandbox Code Playgroud)

这将生成一个称为media内部modules文件夹的模块。

  1. 其次,生成一个添加到该模块的组件
ng g c modules/media/picPick --module=modules/media/media.module.ts
Run Code Online (Sandbox Code Playgroud)

该命令的第一部分ng g c modules/media/picPick将生成一个组件文件夹,该文件夹称为picPick内部modules/media文件夹,其中包含我们的新media模块。

第二部分将通过在模块文件中导入新picPick组件media并将其附加declarations到此模块的数组中,来在模块中声明我们的新组件。

工作树

在此处输入图片说明

  • 您能解释一下如何回答这个问题吗? (2认同)

小智 5

ng g c componentName --module=path-to-your-module-from-src-folder
Run Code Online (Sandbox Code Playgroud)

例子:

ng g c testComponent --module=/src/app/home/test-component/test-component.module
Run Code Online (Sandbox Code Playgroud)


Jar*_*ple 5

一种常见的模式是使用路由、延迟加载的模块和组件来创建功能。

路线: myapp.com/feature

app-routing.module.ts

{ path: 'feature', loadChildren: () => import('./my-feature/my-feature.module').then(m => m.MyFeatureModule) },
Run Code Online (Sandbox Code Playgroud)

文件结构:

app   
????my-feature
?   ?   my-feature-routing.module.ts
?   ?   my-feature.component.html
?   ?   my-feature.component.css
?   ?   my-feature.component.spec.ts
?   ?   my-feature.component.ts
?   ?   my-feature.module.ts
Run Code Online (Sandbox Code Playgroud)

这一切都可以在 cli 中完成:

ng generate module my-feature --module app.module --route feature
Run Code Online (Sandbox Code Playgroud)

或更短

ng g m my-feature --module app.module --route feature
Run Code Online (Sandbox Code Playgroud)

或者,如果您省略名称,cli 将提示您输入。当您需要创建多个功能时非常有用

ng g m --module app.module --route feature
Run Code Online (Sandbox Code Playgroud)