NgModule არის კლასი, რომელიც დეკორირებულია @NgModule-ით და ჯამურად აერთებს დაკავშირებულ კომპონენტებს, დირექტივებს, pipes-ებს და სერვისებს, Angular-ს ეუბნება თუ როგორ უნდა შეკრიბოს და სადაც დააკავშირო ისინი. (შენიშვნა: თანამედროვე Angular სულ უფრო ამჯობინებს standalone components-ებს NgModules-ის ნაცვლად, მაგრამ NgModules-ის გაგება მაინც აუცილებელია უმეტეს არსებულ კოდის ბაზებში.)
NgModule-ის სტრუქტურა
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
@NgModule({
declarations: [UserListComponent, UserCardComponent], // components/directives/pipes THIS module owns
imports: [CommonModule, FormsModule], // other modules whose exports we need
exports: [UserListComponent], // what we make available to importers
providers: [UserService], // services (DI) provided by this module
})
export class UsersModule {}
ოთხი ძირითადი მასივი
declarations → components, directives, and pipes that BELONG to this module
imports → other NgModules whose exported features this module needs
exports → the subset of declarations/modules made available to importers
providers → services registered for dependency injection
კომპონენტი შეიძლება დეკლარირებული იყოს მხოლოდ ერთ მოდულში და უნდა იყოს დეკლარირებული (ან იმპორტირებული როგორც standalone), რომ გამოიყენებული იყოს ამ მოდულის შაბლონებში.
კორневი მოდული
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, AppRoutingModule],
bootstrap: [AppComponent], // the root component to launch
})
export class AppModule {}
ყველა (არა-standalone) აპლიკაციას აქვს ფესვის AppModule bootstrap მასივით, რომელიც სახელს უწოდებს стартირებელ კომპონენტს.
Feature modules და ორგანიზაცია
AppModule (root) → imports → UsersModule, AdminModule, SharedModule
აპლიკაციები არიან ორგანიზებული feature modules-ებში (ერთი თითოეული დომენის არეაზე) და shared module-ში (საერთო კომპონენტები/pipes), რომელიც შენარჩუნებს კოდის ბაზას მოდულიანურად და საშუალებას იძლევა lazy loading-ი თითოეულ ფიჩარზე.
გადაწევა standalone-ზე
@Component({ standalone: true, imports: [CommonModule], ... }) // no NgModule needed
თანამედროვე Angular აძლევს კომპონენტებს standalone ბუნებას — ისინი დეკლარირებენ საკუთარ დამოკიდებულებებს პირდაპირ — აკლებს ან აღმოფხვრის NgModule boilerplate-ს.
რატომ არის ეს მნიშვნელოვანი
NgModules არის Angular-ის ტრადიციული ორგანიზაციისა და dependency-wiring მექანიზმი — declarations/imports/exports/providers-ის გაგება აუცილებელია შემოდგომის უმეტეს არსებულ Angular აპლიკაციებში და lazy loading-ის გასაგებად.
მიუხედავად იმისა, რომ ახალი კოდი ტენდენცია აქვს standalone components-ებისკენ, NgModule ცოდნა კვლავ აუცილებელია რეალური Angular სამუშაოსთვის.
