Создать компонент для конкретного модуля с Angular-CLI

170

Я начинаю использовать angular-cli и уже много читал, чтобы найти ответ о том, что я хочу сделать ... безуспешно, поэтому я пришел сюда.

Есть ли способ создать компонент для нового модуля?

например: ng g module newModule

ng g component newComponent (как добавить этот компонент в newModule ??)

потому что поведение по умолчанию angular-cli заключается в размещении всех новых компонентов внутри app.module. Я хотел бы выбрать, где будет находиться мой компонент, чтобы я мог создавать отдельные модули и не иметь внутри всех своих компонентов app.module. Это можно сделать с помощью angular-cli или я должен сделать это вручную?

Элмер Дантас
источник

Ответы:

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
устарела 6 октября, угловая 6
tom87416
4
Устаревшие. Angular 6 не зависит от структуры папок, чтобы увидеть, в каком модуле находится компонент. Два модуля могут находиться в одном каталоге. Ответ @ daniel stackoverflow.com/a/44812014/511719 работает для Angular 6.
imafish
145
ng g component nameComponent --module=app.module.ts
Даниэль Фернандо Акоста Себальо
источник
10
другие ответы работают, но это наиболее эффективно. Стоит добавить --dry-runк концу этого, просто чтобы посмотреть, что будет затронуто, это хорошая проверка здравомыслия
tony09uk
ng g component path/to/myComponent --module=app.module.ts --dry-runочень полезная команда; просто чтобы убедиться, что ваш компонент создан в правильном каталоге.
theman0123
74

Не уверен, что, возможно, ответ Александра Цесельского был верным на момент написания, но я могу убедиться, что это больше не работает. Неважно, из какого каталога в проекте вы запускаете Angular CLI. Если вы печатаете

ng g component newComponent

он сгенерирует компонент и импортирует его в файл app.module.ts

Единственный способ использовать CLI для автоматического импорта в другой модуль - это указать

ng g component moduleName/newComponent

где moduleName - это модуль, который вы уже определили в своем проекте. Если moduleName не существует, он поместит компонент в каталог moduleName / newComponent, но все равно импортирует его в app.module.

Дисковод
источник
2
это был правильный ответ для меня в то время .. он работает правильно. Я создаю запрос на добавление, чтобы добавить эту информацию в документы. Один из его авторов попросил меня убрать часть компакт-диска .. в конце будет 1. ng g module newModule 2. ng g component new-module/newComponentпо его словам должен быть новый модуль вместо newModule
Elmer Dantas
Просто чтобы указать, используя технику Александра Цезельского и работает, как ожидалось. Должен отметить, что мне не нужно создавать компонент, просто нужно создать папку. Так что я просто mkdirпапка, а затем запустил нг компонента newComponent внутри вновь созданной папки.
Чарли-Гринман,
2
Я бы сказал, что полный ответng g component moduleName/newComponent -m moduleName
Славуган,
В моем случае имя компонента совпадает с именем модуля, поэтому я создал модуль с ng generate module {modComName}1) создал папку 2) создал файл модуля внутри папки с тем же именем; команда ng generate component {modComName}фактически 1) Создает файл компонента в папке с тем же именем 2) Изменен модуль для импорта компонента
The Red Pea
Будьте осторожны, если вы создаете модуль и импортируете его в базовый модуль; ngдобавляет импорт в конец массива; но вы можете захотеть: «Порядок маршрутов в конфигурации имеет значение, и это сделано специально».
Красный горох
37

Я не нашел ответа, который показал бы, как использовать cli для генерации компонента в папке модуля верхнего уровня, а также чтобы компонент автоматически добавил коллекцию объявлений модуля.

Для создания модуля запустите это:

ng g module foo

Чтобы создать компонент в папке модуля foo и добавить его в коллекцию объявлений foo.module.ts, выполните следующее:

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

И Cli вырежет модуль и компонент следующим образом:

введите описание изображения здесь

- EDIT новой версии углового кли ведет себя по-разному. 1.5.5 не хочет имя файла модуля, поэтому команда с v1.5.5 должна быть

ng g component foo/fooList --module=foo
cobolstinks
источник
1
Yay для --moduleаргумента; что документы говорят «Позволяет спецификацию объявляющего модуля.» ; Я хотел бы добавить, --moduleуказывает, какой существующий модуль должен быть изменен, чтобы импортировать модуль, который вы собираетесь создать
The Red Pea
2
@TheRedPea Я полагаю, вы хотели сказать: «--module указывает, какой существующий модуль должен быть изменен для импорта компонента, которым вы являетесь ...»
cobolstinks
Да, вы правы! Существующий модуль изменен со ссылкой на новый компонент
The Red Pea
13

Вы можете попробовать ниже команду, которая описывает,

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

Тогда ваша команда будет выглядеть так:

ng g c user/userComponent -m user.module
user2662006
источник
9

Для Angular v4 и выше просто используйте:

ng g c componentName -m ModuleName
Дядя шемзз
источник
1
Выдает ошибку, Specified module does not existтогда как модуль существовал
Pardeep Jain
1
Вы не указываете имя модуля, вы указываете имя файла модуля.
Роджер
1
Работает как шарм! например, если ваш файл модуля user-settings.module.tsи вы хотите добавить компонент, public-infoто команда будет:ng g c PublicInfo -m user-settings
Spiral Out
1
Это самый простой и чистый ответ!
Барна Тексе
8

вот что сработало для меня:

1 -->  ng g module new-module

2 -->  ng g c new-module/component-test --module=new-module/new-module.module.ts

Если вы хотите создать компонент без его каталога, используйте --flat флаг.

Мохамед Маккауи
источник
не нужно писать .ts
Лапенков Владимир
--module = путь к модулю сработал со мной, спасибо @Mohamed Makkaoui
Ян Постон Фрэмер
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массив этого модуля.

рабочее дерево

введите описание изображения здесь

Elhakim
источник
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, затем перейдите к папке модуля

cd moduleName

И после этого сгенерировать компонент:

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

Используйте --flat, чтобы не создавать дочернюю папку внутри папки модуля

Варун Джайн
источник
1

У меня есть похожие проблемы с несколькими модулями в приложении. Компонент может быть создан для любого модуля, поэтому перед созданием компонента мы должны указать имя конкретного модуля.

'ng generate component newCompName --module= specify name of module'
Вивек
источник
1

Используйте эту простую команду:

ng g c users/userlist

users: Название вашего модуля.

userlist: Имя вашего компонента.

Хасан Фатхи
источник
1

Согласно Angular Docs способ создать компонент для конкретного модуля,

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

"имя каталога" = где CLI сгенерировал функциональный модуль

Пример :-

ng generate component customer-dashboard/CustomerDashboard

В результате создается папка для нового компонента в папке на панели пользователя и обновляется функциональный модуль с помощью CustomerDashboardComponent.

Сксаиф Уддин
источник
1

Первый запуск ng g module newModule . Тогда бегиng g component newModule/newModule --flat

Туан ван Дуонг
источник
1

Я создал компонентный дочерний модуль с определенной корневой папкой

Эта команда ниже я указал, пожалуйста, проверьте

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

Ремонт - это корневая папка нашего дочернего модуля

-m это --module

с для compount

г для генерации

Sathish
источник
1

Я столкнулся с этой проблемой сегодня во время работы над приложением Angular 9. Я получаю сообщение «ошибка модуля не существует» всякий раз, когда я добавляю .module.tsили .moduleк имени модуля. Кли нужно только имя модуля без расширения. Предполагая, что у меня есть имя модуля:, brands.module.tsкоманда, которую я использовал, была

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

удалите, как --dry-runтолько вы подтвердили правильность структуры файла.

doubleya
источник
1
ng g c componentName --module=path-to-your-module-from-src-folder

пример:

ng g c testComponent --module=/src/app/home/test-component/test-component.module
Ивайло Димитров
источник
1

Распространенным шаблоном является создание объекта с маршрутом, отложенным модулем и компонентом.

Маршрут: myapp.com/feature

приложение-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

Все это может быть сделано в кли с:

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 4 с помощью Angular CLI

Чтобы добавить новый компонент Angular 4 в приложение, используйте команду ng g component componentName. После выполнения этой команды Angular CLI добавляет папку component-nameв src\app. Также ссылки того же самого добавляются в src\app\app.module.tsфайл автоматически.

Компонент должен иметь функцию @Componentдекоратора, за classкоторой следует exportредактор. Функция @Componentдекоратора принимает метаданные.

Добавьте компонент в определенную папку приложения Angular 4 с помощью Angular CLI

Чтобы добавить новый компонент в определенную папку, используйте команду ng g component folderName/componentName

Zameer
источник
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 (только в корнях --module, (/) указывает на корень вашего ПРОЕКТА, а НЕ СИСТЕМНЫЙ КОРЕНЬ !!! )

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

isaax2
источник
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)
Карлос Луис Риверо
источник