Kurs Angular · Moduł 3: Moduły

Feature Modules - Prowincje Królestwa

2 min czytania ·
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.ts

Widzisz błąd w tej lekcji?

Sprawdź się

Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.

  1. 1. Który typ modułu zawiera reużywalne komponenty, dyrektywy i pipes współdzielone między feature modules?

  2. 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: [

Przydatne artykuły