สร้างส่วนประกอบไปยังโมดูลเฉพาะด้วย Angular-CLI


171

ฉันเริ่มใช้ angi-cli แล้วและฉันได้อ่านคำตอบมากมายเกี่ยวกับสิ่งที่ฉันต้องการจะทำ ... ไม่ประสบความสำเร็จดังนั้นฉันจึงมาที่นี่

มีวิธีในการสร้างองค์ประกอบให้กับโมดูลใหม่หรือไม่?

เช่น: ng g module newModule

ng g component newComponent (วิธีเพิ่มส่วนประกอบนี้ใน newModule ??)

เพราะการทำงานเริ่มต้นเชิงมุม-CLI app.moduleคือการวางองค์ประกอบใหม่ทั้งหมดภายใน app.moduleผมอยากจะเลือกที่องค์ประกอบของฉันจะเป็นเพื่อที่ฉันสามารถสร้างโมดูลแยกออกจากกันและจะไม่ได้มีส่วนประกอบของฉันทั้งหมดภายใน เป็นไปได้ที่จะทำเช่นนั้นโดยใช้ angular-cli หรือฉันต้องทำด้วยตนเอง?

คำตอบ:


217

เพื่อสร้างองค์ประกอบเป็นส่วนหนึ่งของโมดูลที่คุณควร

  1. ng g module newModule เพื่อสร้างโมดูล
  2. cd newModuleเพื่อเปลี่ยนไดเรกทอรีลงในnewModuleโฟลเดอร์
  3. ng g component newComponent เพื่อสร้างองค์ประกอบเป็นลูกของโมดูล

ปรับปรุง: เชิงมุม 9

ตอนนี้ไม่ว่าคุณจะอยู่ในโฟลเดอร์ใดเมื่อสร้างส่วนประกอบ

  1. ng g module NewMoudle เพื่อสร้างโมดูล
  2. ng g component new-module/new-component เพื่อสร้าง NewComponent

หมายเหตุ: เมื่อ Angular CLI เห็นโมดูลใหม่ / ส่วนประกอบใหม่มันจะเข้าใจและแปลเคสเพื่อให้ตรงกับโมดูลใหม่ -> NewModule และส่วนประกอบใหม่ -> NewComponent มันอาจทำให้สับสนในการเริ่มต้นดังนั้นวิธีง่ายๆคือการจับคู่ชื่อใน # 2 กับชื่อโฟลเดอร์สำหรับโมดูลและส่วนประกอบ


92
ng g component moduleName/componentNameนอกจากนี้คุณยังสามารถอยู่ในรากโครงการและคำนำหน้าองค์ประกอบที่มีชื่อโมดูล
JayChase

3
ด้วย Angular CLI เวอร์ชัน 1.6.8 ฉันมักจะได้รับข้อผิดพลาดอยู่เสมอว่า 'ไม่มีโมดูลที่ระบุ' เมื่อฉันแยกโมดูลที่มีอยู่ออก มันทำงานเมื่อฉันพยายามคำสั่งต่อไปนี้: NG สร้างบริการ Service1 --module หมายเหตุ: ชื่อบริการของฉันคือ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 ไม่ได้ขึ้นอยู่กับโครงสร้างโฟลเดอร์เพื่อดูว่าโมดูลใดที่มีส่วนประกอบอยู่โมดูลสองตัวสามารถอยู่ในไดเรกทอรีเดียวกันได้ stackoverflow.com/a/44812014/511719ของ daniel สำหรับ 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

ไม่แน่ใจว่าคำตอบของอเล็กซานเด 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 ng g module newModule 2. ng g component new-module/newComponentตามที่เขาควรจะเป็นโมดูลใหม่แทน newModule
Elmer Dantas

เพียงแค่ชี้ให้เห็นโดยใช้เทคนิคโดย Alexander Ciesielski และทำงานตามที่คาดไว้ ฉันควรทราบว่าฉันไม่จำเป็นต้องสร้างองค์ประกอบเพียงแค่ต้องการสร้างโฟลเดอร์ ดังนั้นฉันเพียงแค่mkdirโฟลเดอร์แล้ววิ่งองค์ประกอบใหม่ส่วนประกอบภายในโฟลเดอร์ที่สร้างขึ้นใหม่
Charlie-Greenman

2
ฉันจะบอกว่าคำตอบเต็มรูปแบบคือng g component moduleName/newComponent -m moduleName
สลา vugan

ในกรณีของฉันชื่อส่วนประกอบเหมือนกับชื่อโมดูลดังนั้นฉันสร้างโมดูลด้วย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 จะนั่งร้านโมดูลและส่วนประกอบดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

- แก้ไขรุ่นใหม่ของ cli เชิงมุมทำงานแตกต่างกัน 1.5.5 ไม่ต้องการชื่อไฟล์โมดูลดังนั้นคำสั่งที่มี v1.5.5 ควรเป็น

ng g component foo/fooList --module=foo

1
ยะสำหรับการ--moduleโต้แย้ง; เอกสารกล่าวว่า "อนุญาตให้สเปคของโมดูลประกาศ." ; ฉันจะเพิ่ม--moduleระบุโมดูลที่มีอยู่ซึ่งควรจะแก้ไขเพื่อนำเข้าโมดูลที่คุณกำลังจะสร้าง
ถั่วแดง

2
@TheRedPea ฉันเชื่อว่าคุณตั้งใจจะพูดว่า "- โมดูลระบุโมดูลที่มีอยู่ที่ควรจะแก้ไขเพื่อนำเข้าส่วนประกอบที่คุณเป็น ... "
cobolstinks

ใช่คุณพูดถูก! โมดูลที่มีอยู่ได้รับการแก้ไขโดยอ้างอิงกับองค์ประกอบ
The Red Pea

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 module new-module

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

หากคุณต้องการสร้างองค์ประกอบโดยไม่ต้องใช้ไดเรกทอรีของมันใช้--flat ธง


ไม่จำเป็นต้องเขียน. ts
Lapenkov Vladimir

--module = path-to-module ทำงานขอบคุณฉัน @Mohamed Makkaoui
Ian Poston Framer

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
คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับวิธีการตอบคำถามได้ไหม?
Sterling Archer

ขอบคุณสำหรับบันทึกย่อของคุณฉันได้แก้ไขคำตอบของฉันเนื่องจากฉันเป็นผู้อ่านในอนาคต @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

ใช้ - เลื่อนเพื่อไม่สร้างโฟลเดอร์ลูกในโฟลเดอร์โมดูล


1

ฉันมีปัญหาที่คล้ายกันกับหลายโมดูลในแอปพลิเคชัน ส่วนประกอบสามารถสร้างไปยังโมดูลใด ๆ ได้ดังนั้นก่อนที่จะสร้างส่วนประกอบเราจะต้องระบุชื่อของโมดูลนั้น ๆ

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

1

ใช้คำสั่งง่าย ๆ นี้:

ng g c users/userlist

users: ชื่อโมดูลของคุณ

userlist: ชื่อส่วนประกอบของคุณ


1

ตามเอกสาร Angular วิธีการสร้างองค์ประกอบสำหรับโมดูลเฉพาะคือ

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

"directory name" = โดยที่ CLI สร้างโมดูลคุณลักษณะ

ตัวอย่าง: -

ng generate component customer-dashboard/CustomerDashboard

สิ่งนี้จะสร้างโฟลเดอร์สำหรับส่วนประกอบใหม่ภายในโฟลเดอร์แดชบอร์ดลูกค้าและอัปเดตโมดูลคุณลักษณะด้วย CustomerDashboardComponent



1

ฉันสร้างโมดูลลูกที่ใช้ส่วนประกอบที่มีรูทโฟลเดอร์เฉพาะ

คำสั่ง cli ด้านล่างที่ฉันระบุไว้โปรดตรวจสอบ

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

การซ่อมแซมคือโฟลเดอร์รูทของโมดูลลูกของเรา

-m คือ - โมดูล

c สำหรับการคำนวณ

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

แอปพลิเค 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 4 โดยใช้ Angular CLI

หากต้องการเพิ่มใหม่เชิงมุม 4 องค์ประกอบเพื่อ app ng g component componentNameคำสั่งการใช้งาน หลังจากการดำเนินการของคำสั่งนี้เชิงมุม CLI เพิ่มโฟลเดอร์ภายใต้component-name src\appนอกจากนี้การอ้างอิงของแบบเดียวกันจะถูกเพิ่มลงในsrc\app\app.module.tsไฟล์โดยอัตโนมัติ

องค์ประกอบจะต้องมี@Componentฟังก์ชั่นมัณฑนากรตามด้วยclassซึ่งจะต้องมีการexportแก้ไข @Componentฟังก์ชั่นมัณฑนากรยอมรับข้อมูล meta

เพิ่มส่วนประกอบลงในโฟลเดอร์เฉพาะของแอป Angular 4 โดยใช้ Angular CLI

ในการเพิ่มองค์ประกอบใหม่ให้กับโฟลเดอร์เฉพาะให้ใช้คำสั่ง ng g component folderName/componentName


0

หากคุณมีหลายแอปที่ประกาศใน. triangle-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.- คุณสามารถระบุROOT PATHของโครงการของคุณใน--module (เฉพาะใน --module, (/)คะแนนรากของROOT โครงการของคุณและ ไม่ใช่ 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.