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


170

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

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

例如: ng g module newModule

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

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

Answers:


216

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

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

更新:Angular 9

现在,生成组件时所处的文件夹都没有关系。

  1. ng g module NewMoudle 生成模块。
  2. ng g component new-module/new-component 创建NewComponent。

注意:当Angular CLI看到new-module / new-component时,它将理解并转换大小写以匹配new-module-> NewModule和new-component-> NewComponent。一开始它可能会造成混乱,所以简单的方法是将#2中的名称与模块和组件的文件夹名称进行匹配。


92
您还可以保留在项目根目录中,并在组件的前面加上模块名称ng g component moduleName/componentName
JayChase

3
在使用Angular CLI版本1.6.8时,当我分割现有模块时,总是会出现错误消息:“指定的模块不存在”。当我尝试以下命令时,它起作用了: ng generate service service1 --module = module1 / module1.module.ts。注意:我的服务名称是service1,而我的模块名称是module1
Diallo

8
这将在指定目录中创建一个新组件,但不会在模块中注册它。它将在app.module中注册。您需要使用以下--module选项指定模块:ng g component <your component> --module=<your module name>
Vinit Sarvade

3
截止至10月6日,Angular 6
tom87416 '18 -10-6

4
过时的。Angular 6并不依靠文件夹结构来查看组件所在的模块。两个模块可以位于同一目录中。
@daniel

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

10
其他答案有效,但这是最有效的。值得一提--dry-run的是,看看是否会受到影响,这是一个很好的理智检查
tony09uk 18/12/12

ng g component path/to/myComponent --module=app.module.ts --dry-run是非常有用的命令;只是要确保您的组件是在正确的目录中创建的。
theman0123

74

不确定在撰写本文时Alexander Ciesielski的答案是否正确,但我可以证实这不再起作用。运行Angular CLI在项目中的哪个目录都没有关系。如果您输入

ng g component newComponent

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

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

ng g component moduleName/newComponent

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


2
当时对我来说是正确的答案。我创建了一个拉取请求,以将该信息添加到文档中。它的贡献者之一要求我删除cd-ing部分。最后将是1。2 ng g module newModule . ng g component new-module/newComponent根据他的说法,应该是new-module而不是newModule
Elmer Dantas

只需指出,使用亚历山大·切耶斯基(Alexander Ciesielski)的技术并按预期工作。我应该注意,我不需要创建只需要创建文件夹的组件。所以我只是mkdir一个文件夹,然后在新创建的文件夹中运行组件newComponent。
Charlie-Greenman

2
我想说的是,完整的答案是ng g component moduleName/newComponent -m moduleName
斯拉夫甘'17

在我的情况下,组件名称与模块名称相同,因此我创建了以下模块:ng generate module {modComName}1)创建了文件夹2)在同名文件夹内创建了模块文件;该命令ng generate component {modComName}实际上是1)在同名文件夹内创建了一个组件文件2)修改了模块以导入该组件
Red Pea

创建模块并将其导入基本模块时要小心;ng将导入添加到数组的末尾;但是您可能想要:“配置中的路由顺序很重要,这是设计使然。”
红豌豆

37

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

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

ng g module foo

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

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

cli会像下面这样搭建模块和组件:

在此处输入图片说明

-编辑新版本的cli角度行为不同。1.5.5不需要模块文件名,因此带有v1.5.5的命令应为

ng g component foo/fooList --module=foo

1
是的--module。该文件说:“允许申报模块的规范。” ; 我要添加--module指定要修改的现有模块,以导入要创建的模块
Red Pea,

2
@TheRedPea我相信您的意思是“ --module指定应修改哪个现有模块以导入您要使用的组件...”
cobolstinks

是的,您是对的!现有参照新修改模块组件
红色豌豆

13

您可以尝试以下命令,该命令描述了

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

然后您的命令将类似于:

ng g c user/userComponent -m user.module

9

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

ng g c componentName -m ModuleName

1
Specified module does not exist模块存在时引发错误
Pardeep Jain

1
您不指定模块名称,而是指定模块的文件名。
罗杰(Roger)

1
像魅力一样工作!例如,如果您的模块文件是user-settings.module.ts并且要添加组件,public-info则命令将为:ng g c PublicInfo -m user-settings
Spiral Out

1
这是最简单,最干净的答案!
Barna Tekse


8
  1. 首先,通过执行生成模块。
ng g m modules/media

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

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

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

第二部分将新picPick组件在media模块中声明,方法是将其导入模块文件中,并将其附加declarations到此模块的数组中。

工作树

在此处输入图片说明


2
您能解释一下如何回答这个问题吗?
英镑射手

感谢您的来信,我编辑了答案,因为我是未来的读者@CertainPerformance
Elhakim

3

转到模块级别/我们也可以在根级别并输入以下命令

ng g component "path to your component"/NEW_COMPONENT_NAME -m "MODULE_NAME"

范例:

ng g component common/signup/payment-processing/OnlinePayment -m pre-login.module

3

首先生成模块:

ng g m moduleName --routing

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

cd moduleName

然后生成组件:

ng g c componentName --module=moduleName.module.ts --flat

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


1

我在应用程序中的多个模块遇到类似的问题。可以为任何模块创建组件,因此在创建组件之前,我们必须指定特定模块的名称。

'ng generate component newCompName --module= specify name of module'


1

根据Angular文档,为特定模块创建组件的方法是:

ng g component <directory name>/<component name>

“目录名称” = CLI在其中生成功能模块的位置

例子:-

ng generate component customer-dashboard/CustomerDashboard

这将在customer-dashboard文件夹中为新组件生成一个文件夹,并使用CustomerDashboardboardComponent更新功能模块。


1

首先运行ng g module newModule 。然后跑ng g component newModule/newModule --flat


1

我使用特定的根文件夹创建了基于组件的子模块

我在下面指定的cli命令,请签出

ng g c Repair/RepairHome -m Repair/repair.module

修复是我们子模块的根文件夹

-m是--module

c for compount

g生成


1

我今天在搭建Angular 9应用程序时遇到了这个问题。每当在.module.ts.module上添加模块名称时,我都会收到“模块不存在错误” 。cli只需要模块名称,没有扩展名。假设我有一个模块名称:brands.module.ts,我使用的命令是

ng g c path/to/my/components/brands-component -m brands --dry-run

--dry-run确认文件结构正确后,将其删除。


1

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

路线: myapp.com/feature

app-routing.module.ts

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

文件结构:

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

可以使用以下方法在cli中完成所有操作:

ng generate module my-feature --module app.module --route feature

或更短

ng g m my-feature --module app.module --route feature

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

ng g m --module app.module --route feature

0

使用Angular CLI将组件添加到Angular 4应用

要将新的Angular 4组件添加到应用程序,请使用command ng g component componentName。执行此命令后,Angular CLI component-name在下添加一个文件夹src\app。同样,相同的引用也会src\app\app.module.ts自动添加到文件中。

组件应具有@Component装饰器功能,后跟class需要装饰的功能export。的@Component装饰函数接受的元数据。

使用Angular CLI将组件添加到Angular 4应用程序的特定文件夹

要将新组件添加到特定文件夹,请使用以下命令 ng g component folderName/componentName


0

如果您在.angular-cli.json中声明了多个应用程序(例如,在使用功能模块的情况下)

"apps": [{
    "name": "app-name",
    "root": "lib",
    "appRoot": ""
}, {...} ]

您可以 :

ng g c my-comp -a app-name

-a代表--app(名称)


0

我使用此特定命令在模块内部生成组件。

ng g c <module-directory-name>/<component-name>

该命令将生成模块本地的组件。或者您可以先通过键入更改目录。

cd <module-directory-name>

然后创建组件。

ng g c <component-name>

注意:<>中包含的代码代表用户特定的名称。


0

1.-照常创建功能模块。

ng generate module dirlevel1/module-name

2.-您可以在--module中指定项目的ROOT PATH(仅在--module中,(/)根指向您的PROJECT ROOT,不是SYSTEM ROOT !!!

ng generate component dirlevel1/component-name --module /src/app/dirlevel1/module-name.module.ts

真实的例子:

ng generate module stripe/payment-methods-list
ng generate component stripe/payment-methods-list --module=/src/app/stripe/payment-methods-list/payment-methods-list.module.ts 

输出:

CREATE src/app/stripe/payment-methods-list/payment-methods-list.component.scss (0 bytes)
CREATE src/app/stripe/payment-methods-list/payment-methods-list.component.html (39 bytes)
CREATE src/app/stripe/payment-methods-list/payment-methods-list.component.spec.ts (768 bytes)
CREATE src/app/stripe/payment-methods-list/payment-methods-list.component.ts (322 bytes)
UPDATE src/app/stripe/payment-methods-list/payment-methods-list.module.ts (311 bytes)
[OK] Generated component!

使用Angular CLI测试:9.1.4



0

在特定模块中创建模块,服务和组件

Basic:

    ng g module chat     
    ng g service chat/chat -m chat
    ng g component chat/chat-dialog -m chat

    In chat.module.ts:
        exports: [ChatDialogComponent],
        providers: [ChatService]

    In app.module.ts:

        imports: [
            BrowserModule,
            ChatModule
        ]

    Now in app.component.html:
        <chat-dialog></chat-dialog>


LAZY LOADING:
    ng g module pages --module app.module --route pages

        CREATE src/app/pages/pages-routing.module.ts (340 bytes)
        CREATE src/app/pages/pages.module.ts (342 bytes)
        CREATE src/app/pages/pages.component.css (0 bytes)
        CREATE src/app/pages/pages.component.html (20 bytes)
        CREATE src/app/pages/pages.component.spec.ts (621 bytes)
        CREATE src/app/pages/pages.component.ts (271 bytes)
        UPDATE src/app/app-routing.module.ts (8611 bytes)       

    ng g module pages/forms --module pages/pages.module --route forms

        CREATE src/app/forms/forms-routing.module.ts (340 bytes)
        CREATE src/app/forms/forms.module.ts (342 bytes)
        CREATE src/app/forms/forms.component.css (0 bytes)
        CREATE src/app/forms/forms.component.html (20 bytes)
        CREATE src/app/forms/forms.component.spec.ts (621 bytes)
        CREATE src/app/forms/forms.component.ts (271 bytes)
        UPDATE src/app/pages/pages-routing.module.ts (437 bytes)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.