Kurs Angular · Moduł 3: Moduły
Feature Modules - Prowincje Królestwa
W tej lekcji2
Feature modules dzielą aplikację na logiczne części - jak prowincje feudalnej Japonii, każda z własną specjalizacją.
Typy Modułów
1. Feature Module (Prowincja)
Grupuje funkcjonalność biznesową:
// features/samurai/samurai.module.ts
@NgModule({
declarations: [
SamuraiListComponent,
SamuraiDetailComponent,
SamuraiFormComponent
],
imports: [
CommonModule,
SharedModule,
SamuraiRoutingModule
],
exports: [SamuraiListComponent]
})
export class SamuraiModule { }2. Shared Module (Wspólne Zasoby)
Zawiera reużywalne elementy:
// shared/shared.module.ts
@NgModule({
declarations: [
ButtonComponent,
CardComponent,
LoadingSpinnerComponent,
HighlightDirective,
TruncatePipe
],
imports: [CommonModule],
exports: [
// Eksportujemy WSZYSTKO co może być użyte w innych modułach
CommonModule,
ButtonComponent,
CardComponent,
LoadingSpinnerComponent,
HighlightDirective,
TruncatePipe
]
})
export class SharedModule { }3. Core Module (Centrum Dowodzenia)
Singletony i elementy ładowane raz:
// core/core.module.ts
@NgModule({
imports: [
CommonModule,
HttpClientModule
],
providers: [
AuthService,
LoggingService,
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
]
})
export class CoreModule {
// Zabezpieczenie przed wielokrotnym importem
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error('CoreModule already loaded. Import only in AppModule!');
}
}
}Struktura Katalogów
src/app/
├── core/ # Singleton services, guards, interceptors
│ ├── core.module.ts
│ ├── services/
│ │ ├── auth.service.ts
│ │ └── api.service.ts
│ ├── guards/
│ └── interceptors/
│
├── shared/ # Reużywalne komponenty, dyrektywy, pipes
│ ├── shared.module.ts
│ ├── components/
│ ├── directives/
│ └── pipes/
│
├── features/ # Feature modules
│ ├── samurai/
│ │ ├── samurai.module.ts
│ │ ├── samurai-routing.module.ts
│ │ ├── components/
│ │ ├── services/
│ │ └── models/
│ └── dojo/
│
├── app.module.ts
├── app.component.ts
└── app-routing.module.tsWidzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Który typ modułu zawiera reużywalne komponenty, dyrektywy i pipes współdzielone między feature modules?
2. Co grupuje Feature Module (prowincja) w architekturze Angular?
To 2 z 4 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Edytor kodu
Uzupełnij SharedModule tak, by udostępniał innym modułom ButtonComponent oraz moduł z dyrektywami *ngIf i *ngFor i pipe async.
- Układanie w poziomie
Ułóż tokeny dekoratorów chroniących CoreModule przed wielokrotnym importem (parametr konstruktora):
- Układanie w pionie
Uporządkuj katalogi aplikacji Angular zgodnie z konwencją (od warstwy najniższej do feature):
- Klikanie w kolejności
Kliknij elementy w kolejności, aby zbudować początek właściwości providers: providers: [