Middle
Cum funcționează Angular?
sobes.tech AI
Răspuns de la AI
Angular funcționează ca un cadru pentru crearea aplicațiilor de tip single-page (SPA). Componentele și principiile sale cheie:
- Modularitate: Aplicațiile sunt construite din module.
@NgModuledefinește ce componente, servicii și alte elemente aparțin unui modul. - Componente: Blocurile de construcție principale ale aplicațiilor Angular. Fiecare componentă constă dintr-un șablon (HTML), o clasă TypeScript (logică) și stiluri (CSS). Decoratorul
Componentle leagă împreună. - Legarea datelor (Data Binding): Angular asigură legătura între datele din clasa componentei și reprezentarea din șablon. Există legare unidirecțională (property binding, interpolation) și bidirecțională (ngModel).
- Directive: Schimbă comportamentul sau aspectul elementelor DOM. Sunt structurale (
*ngIf,*ngFor) și atributive (ngClass,ngStyle). - Servicii: Clase care conțin logică ce poate fi utilizată de mai multe componente. Sunt folosite pentru obținerea datelor, logica de business etc.
- Injectarea dependențelor (Dependency Injection): Mecanism prin care Angular furnizează servicii componentelor sau altor servicii. Face codul mai flexibil și testabil.
- Routing: Permite navigarea între diferite reprezentări (componente) ale aplicației fără reîncărcarea paginii. Este definit cu
RouterModuleși configurația rutelor. - Ciclul de viață al componentei: O serie de evenimente care au loc de la crearea până la distrugerea unei componente. Angular oferă hook-uri (metode) pe care le poți implementa pentru a executa acțiuni în anumite etape (
ngOnInit,ngOnDestroy). - Detecția schimbărilor (Change Detection): Mecanism care determină când trebuie actualizată reprezentarea (DOM) pe baza modificărilor din datele aplicației. Angular folosește zone (
NgZone) pentru a urmări evenimentele asincrone și a porni automat detecția schimbărilor. - Șabloane (Templates): HTML cu extensii Angular pentru legarea datelor, directive și expresii.
- RxJS: Angular utilizează activ biblioteca RxJS pentru lucrul cu date asincrone și fluxuri de evenimente.
Procesul de lucru la nivel înalt:
- Încărcare: Browserul încarcă
index.html. - Pornire: Se pornește rădăcina aplicației, de obicei în
main.ts. - Bootstrapping:
@NgModulepentru modulul rădăcină (de obiceiAppModule) se încarcă cuplatform-browser. - Renderizare: Angular creează și redă componentele, începând cu rădăcina.
- Legarea datelor: Datele din clasele componentelor sunt legate de șabloane.
- Detecția schimbărilor: Angular monitorizează modificările datelor și actualizează reprezentarea.
- Routing: Tranzițiile între reprezentări sunt gestionate de router.
// Exemplu de componentă simplă
import { Component } from '@angular/core';
@Component({
selector: 'app-greet', // Numele tag-ului pentru utilizare în șablon
template: `<p>{{ message }}</p>`, // Șablonul componentei
styles: ['p { color: blue; }'] // Stilurile componentei
})
export class GreetComponent {
// Logica componentei
message = 'Salut din Angular!';
}
// Exemplu de utilizare a unui serviciu cu DI
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root' // Serviciul este disponibil în injectorul rădăcină
})
export class DataService {
getData(): string {
return 'Date din serviciu';
}
}
// În componenta care utilizează serviciul
import { Component, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-show-data',
template: `<p>{{ serviceData }}</p>`,
})
export class ShowDataComponent implements OnInit {
serviceData: string = '';
constructor(private dataService: DataService) { // Injectarea serviciului
}
ngOnInit() {
this.serviceData = this.dataService.getData();
}
}
Angular compilează TypeScript și șabloanele HTML în JavaScript în timpul procesului de build (compilare AOT implicit), ceea ce crește performanța.