Utwórz komponent do określonego modułu za pomocą Angular-CLI

170

Zaczynam używać angular-cli i już dużo czytałem, aby znaleźć odpowiedź na temat tego, co chcę zrobić ... bez sukcesu, więc przyjechałem tutaj.

Czy istnieje sposób na utworzenie komponentu do nowego modułu?

na przykład: ng g module newModule

ng g component newComponent (jak dodać ten komponent do newModule ??)

ponieważ domyślnym zachowaniem angular-cli jest umieszczanie wszystkich nowych komponentów w środku app.module. Chciałbym wybrać, gdzie będzie mój komponent, aby móc tworzyć oddzielne moduły i nie mieć w sobie wszystkich moich komponentów app.module. Czy można to zrobić za pomocą angular-cli, czy muszę to zrobić ręcznie?

Elmer Dantas
źródło

Odpowiedzi:

216

Aby stworzyć komponent jako część modułu, powinieneś

  1. ng g module newModule wygenerować moduł,
  2. cd newModuleaby zmienić katalog na newModulefolder
  3. ng g component newComponent aby utworzyć komponent jako element podrzędny modułu.

AKTUALIZACJA: Angular 9

Teraz nie ma znaczenia, w jakim folderze jesteś podczas generowania komponentu.

  1. ng g module NewMoudle aby wygenerować moduł.
  2. ng g component new-module/new-component aby utworzyć NewComponent.

Uwaga: Kiedy Angular CLI widzi nowy-moduł / nowy-komponent, rozumie i tłumaczy przypadek, aby dopasować nowy-moduł -> NowyModule i nowy-komponent -> NowyKomponent. Na początku może to być mylące, więc prostym sposobem jest dopasowanie nazw w # 2 do nazw folderów modułu i komponentu.

Aleksandra Ciesielskiego
źródło
92
Możesz także pozostać w katalogu głównym projektu i poprzedzić komponent nazwą modułu ng g component moduleName/componentName.
JayChase
3
W Angular CLI w wersji 1.6.8 zawsze otrzymywałem błąd informujący, że „określony moduł nie istnieje”, kiedy rozróżniam istniejący moduł. Zadziałało, gdy wypróbowałem następujące polecenie: ng generuj usługę service1 --module = module1 / module1.module.ts . Uwaga: nazwa mojej usługi to service1, a nazwa modułu to module1
Diallo,
8
Spowodowałoby to utworzenie nowego komponentu w określonym katalogu, ale nie zarejestrowałoby go w module. Zarejestruje go w module app.module. musisz określić moduł z --moduleopcją taką jak:ng g component <your component> --module=<your module name>
Vinit Sarvade
3
nieaktualne od 6 października, Angular 6
tom87416
4
Przestarzały. Angular 6 nie zależy od struktur folderów, aby zobaczyć, w którym module znajduje się komponent. Dwa moduły mogą znajdować się w tym samym katalogu. @ daniel's answer stackoverflow.com/a/44812014/511719 działa dla Angular 6.
imafish
145
ng g component nameComponent --module=app.module.ts
Daniel Fernando Acosta Ceballo
źródło
10
inne odpowiedzi działają, ale ta jest najbardziej wydajna. Warto dodać --dry-runna koniec, żeby zobaczyć, na co to wpłynie, jest to niezły test poczytalności
tony09uk
ng g component path/to/myComponent --module=app.module.ts --dry-runto bardzo przydatne polecenie; tylko po to, aby upewnić się, że komponent został utworzony w odpowiednim katalogu.
theman0123
74

Nie jestem pewien, czy może odpowiedź Aleksandra Ciesielskiego była poprawna w momencie pisania tego tekstu, ale mogę zweryfikować, że to już nie działa. Nie ma znaczenia, w którym katalogu w projekcie uruchomisz Angular CLI. Jeśli wpiszesz

ng g component newComponent

wygeneruje komponent i zaimportuje go do pliku app.module.ts

Jedynym sposobem użycia interfejsu CLI do automatycznego zaimportowania go do innego modułu jest określenie

ng g component moduleName/newComponent

gdzie moduleName to moduł, który już zdefiniowałeś w projekcie. Jeśli module nazwa_modułu nie istnieje, umieści komponent w katalogu nazwa_modułu / newComponent, ale nadal będzie importować go do app.module

Napęd
źródło
2
to była dla mnie właściwa odpowiedź w tamtym czasie ... to działa poprawnie. Tworzę żądanie ściągnięcia, aby dodać te informacje do dokumentów. To jest jeden z autorów pytają mnie, aby usunąć cd-ing part..in końcu będzie 1. ng g module newModule 2. ng g component new-module/newComponentWedług niego powinien być nowy moduł zamiast newModule
Elmer Dantas
Dla przypomnienia, techniką Aleksandra Ciesielskiego działa zgodnie z oczekiwaniami. Powinienem zauważyć, że nie musiałem tworzyć komponentu potrzebnego po prostu do utworzenia folderu. Więc tylko mkdirfolder, a następnie uruchomiłem komponent newComponent wewnątrz nowo utworzonego folderu.
Charlie-Greenman
2
Powiedziałbym, że pełna odpowiedź brzming g component moduleName/newComponent -m moduleName
slavugan
W moim przypadku nazwa komponentu jest taka sama jak nazwa modułu, więc utworzyłem moduł za pomocą ng generate module {modComName}1) Utworzono folder 2) Utworzono plik modułu w folderze o tej samej nazwie; polecenie ng generate component {modComName}faktycznie 1) Utworzono plik komponentu w folderze o tej samej nazwie 2) Zmodyfikowano moduł, aby zaimportować komponent
The Red Pea
Zachowaj ostrożność, jeśli tworzysz moduł i importujesz go do modułu podstawowego; ngdodaje importy na koniec tablicy; ale możesz chcieć: „Kolejność tras w konfiguracji ma znaczenie i jest to zgodne z projektem”.
The Red Pea
37

Nie znalazłem odpowiedzi, która pokazałaby, jak użyć cli do wygenerowania komponentu w folderze modułu najwyższego poziomu, a także że komponent automatycznie dodał kolekcję deklaracji modułu.

Aby utworzyć moduł, uruchom to:

ng g module foo

Aby utworzyć komponent w folderze modułu foo i dodać go do kolekcji deklaracji foo.module.ts, uruchom to:

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

A CLI będzie szkieletować moduł i komponent w następujący sposób:

wprowadź opis obrazu tutaj

--EDIT nowa wersja kątowego CLI zachowuje się inaczej. Wersja 1.5.5 nie potrzebuje nazwy pliku modułu, więc powinno tak być w poleceniu w wersji 1.5.5

ng g component foo/fooList --module=foo
cobolstinks
źródło
1
Brawo za --moduleargument; w dokumentach jest napisane „Zezwala na specyfikację modułu deklarującego”. ; Dodałbym, że --moduleokreśla, który istniejący moduł należy zmodyfikować, aby zaimportować moduł, który zamierzasz utworzyć
The Red Pea
2
@TheRedPea Myślę, że chciałeś powiedzieć „--module określa, który istniejący moduł powinien zostać zmodyfikowany, aby zaimportować komponent, którym jesteś ...”
cobolstinks
Tak, masz rację! Istniejący moduł zmodyfikowany w odniesieniu do nowego komponentu
The Red Pea
13

Możesz wypróbować poniższe polecenie, które opisuje,

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

Wtedy twoje polecenie będzie brzmiało:

ng g c user/userComponent -m user.module
user2662006
źródło
9

W przypadku Angular v4 i nowszych po prostu użyj:

ng g c componentName -m ModuleName
Wujek Shemzz
źródło
1
Zgłasza błąd, Specified module does not existgdy moduł istniał
Pardeep Jain
1
Nie określasz nazwy modułu, określasz nazwę pliku modułu.
Roger
1
Działa jak urok! np. jeśli plik modułu to user-settings.module.tsi chcesz dodać komponent, public-infopolecenie będzie wyglądać następująco:ng g c PublicInfo -m user-settings
Spiral Out
1
To najprostsza i najczystsza odpowiedź!
Barna Tekse
8

to działa dla mnie:

1 -->  ng g module new-module

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

Jeśli chcesz wygenerować komponent bez jego katalogu użyj --flat flagi.

Mohamed Makkaoui
źródło
nie trzeba pisać .ts
Lapenkov Vladimir
--module = ścieżka do modułu zadziałała ode mnie dzięki @Mohamed Makkaoui
Ian Poston Framer
8
  1. Najpierw generujesz moduł, wykonując.
ng g m modules/media

wygeneruje to moduł o nazwie mediainside modulesfolder.

  1. Po drugie, generujesz komponent dodany do tego modułu
ng g c modules/media/picPick --module=modules/media/media.module.ts

pierwsza część polecenia ng g c modules/media/picPickwygeneruje folder komponentów o nazwie picPickwewnątrz modules/mediafolderu, który zawiera nasz nowy mediamoduł.

druga część sprawi, że nasz nowy picPickkomponent zostanie zadeklarowany w mediamodule, importując go do pliku modułu i dodając do declarationstablicy tego modułu.

drzewo robocze

wprowadź opis obrazu tutaj

Elhakim
źródło
2
Czy możesz wyjaśnić więcej, jak to odpowiada na pytanie?
Sterling Archer
Dziękuję za notatkę, zredagowałem moją odpowiedź, ponieważ jestem przyszłym czytelnikiem @CertainPerformance
Elhakim
3

Przejdź na poziom modułu / możemy też być na poziomie głównym i wpisać poniższe polecenia

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

Przykład:

ng g component common/signup/payment-processing/OnlinePayment -m pre-login.module
Sandeep Patel
źródło
3

Najpierw wygeneruj moduł:

ng g m moduleName --routing

Spowoduje to utworzenie folderu moduleName, a następnie przejdź do folderu modułu

cd moduleName

Następnie wygeneruj komponent:

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

Użyj --flat, aby nie tworzyć folderu podrzędnego w folderze modułu

Varun Jain
źródło
1

Mam podobne problemy z wieloma modułami w aplikacji. Komponent można stworzyć do dowolnego modułu, dlatego przed utworzeniem komponentu musimy podać nazwę konkretnego modułu.

'ng generate component newCompName --module= specify name of module'
vivek
źródło
1

Użyj tego prostego polecenia:

ng g c users/userlist

users: Nazwa Twojego modułu.

userlist: Nazwa twojego komponentu.

Hasan Fathi
źródło
1

Zgodnie z dokumentacją Angular, sposobem na stworzenie komponentu dla konkretnego modułu jest:

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

„nazwa katalogu” = miejsce, w którym CLI wygenerował moduł funkcji

Przykład: -

ng generate component customer-dashboard/CustomerDashboard

Spowoduje to wygenerowanie folderu dla nowego komponentu w folderze pulpitu klienta i zaktualizuje moduł funkcji za pomocą komponentu CustomerDashboardComponent

Sksaif Uddin
źródło
1

Pierwszy bieg ng g module newModule . Następnie uruchomićng g component newModule/newModule --flat

Tuan van Duong
źródło
1

Stworzyłem moduł potomny oparty na komponentach z określonym folderem głównym

To polecenie CLI poniżej, które określiłem, sprawdź

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

Naprawa jest folderem głównym naszego modułu podrzędnego

-m to --module

c dla compount

g do generowania

satish
źródło
1

Napotkałem ten problem dzisiaj podczas tworzenia szkieletu aplikacji Angular 9. Otrzymałem komunikat „moduł nie istnieje” za każdym razem, gdy dodałem .module.tslub .moduledo nazwy modułu. CLI potrzebuje tylko nazwy modułu bez rozszerzenia. Zakładając, że mam nazwę modułu:, brands.module.tspolecenie, którego użyłem, to

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

usuń --dry-runpo potwierdzeniu, że struktura plików jest prawidłowa.

doubleya
źródło
1

Typowym wzorcem jest utworzenie elementu z trasą, leniwym ładowanym modułem i komponentem.

Trasa: myapp.com/feature

app-routing.module.ts

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

Struktura plików:

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

To wszystko można zrobić w CLI za pomocą:

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

Albo krócej

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

Lub jeśli pominiesz nazwę, cli zapyta o to. Bardzo przydatne, gdy musisz stworzyć kilka funkcji

ng g m --module app.module --route feature
Jared Whipple
źródło
0

Dodaj komponent do aplikacji Angular 4 za pomocą Angular CLI

Aby dodać nowy komponent Angular 4 do aplikacji, użyj polecenia ng g component componentName. Po wykonaniu tego polecenia Angular CLI dodaje folder component-namepod src\app. Również odniesienia do tego samego są src\app\app.module.tsautomatycznie dodawane do pliku.

Komponent powinien mieć funkcję @Componentdekoratora, po której następuje element, classktóry należy exportedytować. Funkcja @Componentdekoratora akceptuje metadane.

Dodaj komponent do określonego folderu aplikacji Angular 4 przy użyciu interfejsu wiersza polecenia Angular

Aby dodać nowy komponent do określonego folderu, użyj polecenia ng g component folderName/componentName

Zameer
źródło
0

Jeśli masz wiele aplikacji zadeklarowanych w .angular-cli.json (np. W przypadku pracy z modułem funkcji)

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

Możesz :

ng g c my-comp -a app-name

-a oznacza --app (nazwa)

Sam
źródło
0

Używam tego konkretnego polecenia do generowania komponentów wewnątrz modułu.

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

To polecenie wygeneruje komponent lokalnie dla modułu. lub Najpierw możesz zmienić katalog, wpisując.

cd <module-directory-name>

a następnie utwórz komponent.

ng g c <component-name>

Uwaga: kod zawarty w <> reprezentuje nazwy użytkownika.

Shashank Rawat
źródło
0

1. - Jak zwykle utwórz moduł funkcji.

ng generate module dirlevel1/module-name

2.- Możesz określić ścieżkę ROOT swojego projektu w --module (tylko w --module, (/) wskazuje korzenie twojego PROJEKTU i NIE JEST KORZENIEM SYSTEMU !!! )

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

Prawdziwy przykład:

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 

Wynik:

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!

Testowane za pomocą Angular CLI: 9.1.4

isaax2
źródło
0
ng g c componentName --module=path-to-your-module-from-src-folder

przykład:

ng g c testComponent --module=/src/app/home/test-component/test-component.module
Ivailo Dimitrov
źródło
0

Stwórz moduł, usługę i komponent w konkretnym module

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)
Carlos Luis Rivero
źródło