Kurs Angular · Moduł 1: Wprowadzenie do Angulara

Czym jest Angular?

2 min czytania ·
W tej lekcji3

Witaj w Akademii Samurajów Kodu! Jestem Mistrz Ango-san i będę Twoim przewodnikiem na ścieżce Angulara. Tak jak młody samuraj musi poznać historię swojego klanu, tak Ty musisz poznać pochodzenie frameworka, który opanujesz.

Historia Angulara - Od AngularJS do Angular 19

Angular to potężny framework stworzony przez Google, a jego historia jest fascynująca jak opowieści o legendarnych wojownikach.

Era AngularJS (2010-2016)

W 2010 roku narodził się AngularJS (Angular 1.x) - jeden z pierwszych frameworków, które zrewolucjonizowały tworzenie aplikacji webowych. Spopularyzował w przeglądarce takie koncepcje jak dwukierunkowe wiązanie danych (two-way data binding) i wstrzykiwanie zależności (dependency injection).

Narodziny Angular 2+ (2016)

W 2016 roku Google przepisał framework od zera, tworząc Angular 2. To było jak przejście od drewnianego miecza do katany - zupełnie nowe narzędzie, zbudowane na TypeScripcie.

Angular dzisiaj (v19+)

Dziś Angular (w tym kursie wersja 19 i nowsze) to dojrzały, "opinionated" framework z:

  • Standalone Components - niezależni wojownicy, bez potrzeby modułów
  • Signals - system reaktywności (od Angular 16, stabilny od 17), jak sygnały dymne między zamkami
  • Zoneless - przyszłość bez Zone.js dla lepszej wydajności

Filozofia Angulara - Kodeks Bushido Frameworka

Angular jest "opinionated" - ma jasno określone zasady i strukturę, podobnie jak kodeks Bushido dla samurajów.

Zasady Angulara:

  1. Struktura - każdy projekt ma określoną organizację
  2. TypeScript - typowanie to dyscyplina i precyzja
  3. Dependency Injection - system zaopatrzenia wojowników
  4. Komponenty - podstawowa jednostka jak pojedynczy samuraj
// Pierwszy komponent Angular - prosty jak powitanie w dojo
import { Component } from '@angular/core';

@Component({
  selector: 'app-dojo',
  standalone: true,
  template: `
    <div class="dojo">
      <h1>道場 Dojo Kodu</h1>
      <p>Witaj, młody wojowniku: {{ imie }}</p>
    </div>
  `
})
export class DojoComponent {
  imie = 'Uczniu';
}

Angular vs Inne Frameworki

CechaAngularReactVue
TypFramework kompletnyBibliotekaFramework progresywny
JęzykTypeScript (wymagany)JavaScript/TypeScriptJavaScript/TypeScript
StrukturaŚcisła (opinionated)ElastycznaElastyczna
Krzywa uczeniaStromaŚredniaŁagodna
Najlepszy dlaAplikacje korporacyjne, duże projektyUI, elastycznośćPrototypy, średnie projekty

Angular jest jak tradycyjne szkolenie samurajskie - wymaga dyscypliny i czasu, ale daje solidne fundamenty na całe życie programisty.

Kod do tej lekcji: src/app/app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <div class="dojo">
      <header class="dojo-header">
        <h1>Akademia Samurajów Kodu</h1>
        <p class="subtitle">道場 Dojo Angular - Moduł 1</p>
      </header>

      <main class="dojo-content">
        <section class="welcome-panel">
          <h2>Witaj, Młody Wojowniku!</h2>
          <p>
            To jest Twój pierwszy komponent Angular w naszym Dojo.
            Stworzyliśmy go jako Standalone Component - niezależnego wojownika.
          </p>
          <p>
            <strong>Mistrz Ango-san:</strong> "Każda wielka podróż zaczyna się od pierwszego kroku.
            Twoja droga samuraja kodu właśnie się rozpoczęła!"
          </p>
        </section>

        <section class="info-panel">
          <h3>Czym jest Angular?</h3>
          <ul>
            <li>Framework od Google</li>
            <li>TypeScript jako fundament</li>
            <li>Standalone Components</li>
            <li>Signals - nowa reaktywność</li>
          </ul>
        </section>

        <section class="counter-demo">
          <h3>Licznik Treningów</h3>
          <div class="counter">
            <button (click)="decrementTraining()" class="btn">-</button>
            <span class="training-display">Treningi: {{ trainingCount }}</span>
            <button (click)="incrementTraining()" class="btn">+</button>
          </div>
          <p class="status" [class]="getStatusClass()">
            Status: {{ getStatusText() }}
          </p>
        </section>
      </main>

      <footer class="dojo-footer">
        <p>道場 Dojo Kodu © 2024 - Droga Samuraja Angular</p>
      </footer>
    </div>
  `,
  styles: [`
    .dojo {
      font-family: 'Segoe UI', sans-serif;
      max-width: 800px;
      margin: 0 auto;
      padding: 20px;
      background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
      min-height: 100vh;
      color: #eee;
    }

    .dojo-header {
      text-align: center;
      padding: 20px;
      border-bottom: 2px solid #c9a227;
    }

    .dojo-header h1 {
      color: #c9a227;
      margin: 0;
      font-size: 2rem;
    }

    .subtitle {
      color: #888;
      font-style: italic;
    }

    .dojo-content {
      padding: 20px 0;
    }

    .welcome-panel, .info-panel, .counter-demo {
      background: rgba(255,255,255,0.05);
      border: 1px solid #c9a227;
      border-radius: 8px;
      padding: 20px;
      margin-bottom: 20px;
    }

    h2, h3 {
      color: #c9a227;
    }

    ul {
      list-style: none;
      padding-left: 0;
    }

    .counter {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 20px;
      margin: 20px 0;
    }

    .btn {
      background: #c9a227;
      color: #1a1a2e;
      border: none;
      width: 40px;
      height: 40px;
      font-size: 1.5rem;
      border-radius: 50%;
      cursor: pointer;
      transition: transform 0.2s;
    }

    .btn:hover {
      transform: scale(1.1);
    }

    .training-display {
      font-size: 1.5rem;
      min-width: 150px;
      text-align: center;
    }

    .status {
      text-align: center;
      padding: 10px;
      border-radius: 4px;
    }

    .status.beginner { background: #4a5568; }
    .status.intermediate { background: #2d6a4f; }
    .status.advanced { background: #7c3aed; }
    .status.master { background: #c9a227; color: #1a1a2e; }

    .dojo-footer {
      text-align: center;
      padding: 20px;
      border-top: 1px solid #333;
      color: #666;
    }
  `]
})
export class AppComponent {
  trainingCount = 0;

  incrementTraining(): void {
    this.trainingCount++;
  }

  decrementTraining(): void {
    if (this.trainingCount > 0) {
      this.trainingCount--;
    }
  }

  getStatusClass(): string {
    if (this.trainingCount >= 100) return 'master';
    if (this.trainingCount >= 50) return 'advanced';
    if (this.trainingCount >= 10) return 'intermediate';
    return 'beginner';
  }

  getStatusText(): string {
    if (this.trainingCount >= 100) return 'Mistrz!';
    if (this.trainingCount >= 50) return 'Zaawansowany';
    if (this.trainingCount >= 10) return 'Średniozaawansowany';
    return 'Początkujący';
  }
}

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. W którym roku wydano Angular 2 (przepisany od zera na TypeScript)?

  2. 2. Która firma stworzyła i rozwija framework Angular?

  3. 3. Co oznacza, że Angular jest frameworkiem 'opinionated'?

  4. 4. Który z poniższych jest nowym systemem reaktywności Angulara?

Zadania praktyczne w grze

  • Układanie w poziomie

    Ułóż w jednej linii poprawny import dekoratora Component z biblioteki Angulara:

  • Klikanie w kolejności

    Kliknij po kolei, aby zbudować początek dekoratora komponentu: @Component({})

Przydatne artykuły