Kurs Angular · Moduł 1: Wprowadzenie do Angulara

Standalone Components - Niezależni Wojownicy

3 min czytania ·
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 --standalone

Od Angular 17+ flaga --standalone jest domyślna, więc wystarczy:

ng g c dojo

Od 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. 1. Co oznacza flaga 'standalone: true' w dekoratorze @Component?

  2. 2. Jakie polecenie generuje nowy komponent przez Angular CLI?

  3. 3. Przez którą właściwość dekoratora @Component standalone component deklaruje zależności swojego szablonu (inne komponenty, dyrektywy, pipes)?

  4. 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):

Przydatne artykuły