Kurs Angular · Moduł 3: Moduły
Standalone Components vs NgModules
W tej lekcji3
Angular 17+ preferuje Standalone Components - prostsze podejście bez modułów.
Porównanie Podejść
Stary Sposób (NgModule-based)
// samurai.component.ts
@Component({
selector: 'app-samurai',
standalone: false,
templateUrl: './samurai.component.html'
})
export class SamuraiComponent { }
// samurai.module.ts
@NgModule({
declarations: [SamuraiComponent],
imports: [CommonModule, SharedModule],
exports: [SamuraiComponent]
})
export class SamuraiModule { }Nowy Sposób (Standalone)
// samurai.component.ts - wszystko w jednym pliku!
@Component({
selector: 'app-samurai',
standalone: true,
imports: [CommonModule, CardComponent, ButtonComponent],
templateUrl: './samurai.component.html'
})
export class SamuraiComponent { }
// Użycie - bezpośredni import
@Component({
standalone: true,
imports: [SamuraiComponent]
})
export class AppComponent { }Lazy Loading ze Standalone
// app.routes.ts
export const routes: Routes = [
{
path: 'samurai',
loadComponent: () => import('./samurai/samurai.component')
.then(c => c.SamuraiComponent)
},
{
path: 'dojo',
loadChildren: () => import('./dojo/dojo.routes')
.then(r => r.DOJO_ROUTES)
}
];Kiedy Używać Czego?
| Scenariusz | Rekomendacja |
|---|---|
| Nowy projekt (Angular 17+) | Standalone Components |
| Legacy projekt | Pozostań przy NgModules |
| Biblioteka Angular | Standalone (łatwiejsze użycie) |
| Duży enterprise projekt | Możesz mieszać oba podejścia |
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Od której wersji Angular Standalone Components są domyślnym i zalecanym podejściem?
2. Gdzie standalone component deklaruje swoje zależności (np. CommonModule)?
To 2 z 4 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Edytor kodu
Uzupełnij komponent karty samuraja tak, by działał bez NgModule i sam dołączał CommonModule oraz RouterLink, których używa jego szablon.
- Układanie w poziomie
Ułóż tokeny linii oznaczającej komponent jako standalone w dekoratorze:
- Klikanie w kolejności
Kliknij elementy w kolejności, aby zbudować początek lazy loadingu standalone: loadComponent: () =>