Kurs Angular · Moduł 1: Wprowadzenie do Angulara
Standalone Components - Niezależni Wojownicy
W tej lekcji5
Od Angular 17, Standalone Components są domyślnym i zalecanym sposobem tworzenia komponentów. Są jak ronini - niezależni wojownicy, którzy nie potrzebują przynależności do klanu (NgModule).
Czym są Standalone Components?
Standalone Components to komponenty, które:
- Nie wymagają deklaracji w NgModule
- Same zarządzają swoimi zależnościami przez
imports- to tu wpisujesz komponenty, dyrektywy i pipes, których używa szablon - Są łatwiejsze do testowania i ponownego użycia
Tworzenie Standalone Component
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterLink } from '@angular/router';
@Component({
selector: 'app-katana',
standalone: true, // Od Angular 19 domyślne - piszemy jawnie
imports: [CommonModule, RouterLink], // Zależności
template: `
<div class="katana-card">
<h2>{{ nazwa }}</h2>
<p>Typ: {{ typ }}</p>
<p>Ostrość: {{ ostrosc }}/10</p>
@if (ostrosc >= 8) {
<span class="badge">Mistrzowska!</span>
}
<a routerLink="/kolekcja">Wróć do kolekcji</a>
</div>
`,
styles: [`
.katana-card {
border: 2px solid #8b4513;
padding: 1rem;
border-radius: 8px;
}
.badge {
background: gold;
padding: 0.25rem 0.5rem;
}
`]
})
export class KatanaComponent {
nazwa = 'Masamune';
typ = 'Tachi';
ostrosc = 9;
}Blok @if (warunek) { ... } to nowa składnia warunkowego wyświetlania (wbudowany control flow, od Angular 17). Zastępuje starszą dyrektywę *ngIf.
Standalone a podejście z NgModule
Stary sposób (NgModule):
// katana.component.ts
@Component({
selector: 'app-katana',
template: '...'
})
export class KatanaComponent { }
// katana.module.ts
@NgModule({
declarations: [KatanaComponent],
imports: [CommonModule],
exports: [KatanaComponent]
})
export class KatanaModule { }Nowy sposób (Standalone):
@Component({
selector: 'app-katana',
standalone: true,
imports: [CommonModule],
template: '...'
})
export class KatanaComponent { }Znacznie prościej! Jeden plik zamiast dwóch.
Generowanie Standalone Component przez CLI
ng generate component dojo --standalone
# lub krócej:
ng g c dojo --standaloneOd Angular 17+ flaga --standalone jest domyślna, więc wystarczy:
ng g c dojoOd Angular 19 także w dekoratorze standalone: true jest wartością domyślną, więc CLI już go nie dopisuje. W tym module piszemy go jawnie, żeby było widać, że komponent jest samodzielny.
Bootstrap Aplikacji Standalone
// main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { appConfig } from './app/app.config';
bootstrapApplication(AppComponent, appConfig)
.catch(err => console.error(err));// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes)
]
};Czysto, przejrzyście i nowocześnie - jak minimalistyczna estetyka japońska!
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Co oznacza flaga 'standalone: true' w dekoratorze @Component?
2. Jakie polecenie generuje nowy komponent przez Angular CLI?
3. Przez którą właściwość dekoratora @Component standalone component deklaruje zależności swojego szablonu (inne komponenty, dyrektywy, pipes)?
4. Która składnia jest nowym sposobem warunkowego renderowania w szablonie Angular 19?
Zadania praktyczne w grze
- Układanie w poziomie
Ułóż w jednej linii poprawny import providera routingu w pliku app.config.ts:
- Układanie w pionie
Uporządkuj elementy pliku standalone component (od góry do dołu):
- Klikanie w kolejności
Kliknij po kolei, aby zbudować skrócone polecenie generujące komponent dojo: ng g c dojo
- Układanie w poziomie
Ułóż w jednej linii poprawne wywołanie startujące aplikację standalone:
- Klikanie w kolejności
Kliknij po kolei, aby zbudować właściwość oznaczającą komponent jako standalone: standalone: true
- Edytor kodu
Napisz standalone component: klasę export class DojoComponent z właściwością nazwa = 'Akademia Kodu' oraz dekorator @Component z selector: 'app-dojo', standalone: true i szablonem (template), który wyświetla nazwę w nagłówku <h1> przez interpolację {{ nazwa }}.
- Układanie w pionie
Uporządkuj chronologicznie etapy rozwoju Angulara (od najstarszego na górze):