Professional Documents
Culture Documents
Angular ne nameće ove principe, već pomaže da se prateći ove principe realizuje podela
aplikacione logike na servise i da se oni kroz dependency injection učine dostupnim
komponentama.
U sledećem kodu je dat jedan primer za servis klasu, koja ispisuje logove na konzoli.
export class Logger {
log(msg: any) { console.log(msg); }
error(msg: any) { console.error(msg); }
warn(msg: any) { console.warn(msg); }
}
Servisi mogu zavisiti od drugih servisa, pa na primer HeroService iz primera koji ćemo raditi
detalјnije zavisi od Logger i BackendService servisa, dok npr. BackendService može zavisiti od
drugih servisa, kao što je npr. HttpClient servis za dovlačenje podataka sa servera.
export class HeroService {
private heroes: Hero[] = [];
constructor(
private backend: BackendService,
private logger: Logger) { }
getHeroes() {
this.backend.getAll(Hero).then( (heroes: Hero[]) => {
this.logger.log(`Fetched ${heroes.length} heroes.`);
this.heroes.push(...heroes); // fill cache
});
return this.heroes;
}
}
Kada Angular detektuje ovu zavisnost komponente od servisa, prvo proverava da li injektor
već ima neku postojeću instancu tog servisa. Ako ne postoji nijedna instanca traženog servisa,
injektor kreira novu instancu preko registrovanog provajdera, dodaje je injektoru i potom
vraća taj servis Angular serveru. Kada se razreše sve zavisnosti od servisa, Angular poziva
konstruktor komponente sa tim servisima kao argumentima/parametrima.
Proces injektovanja HeroService u komponentu servisa prikazan je na sledećoj slici.
Za svaki servis koji ćemo koristiti mora se registrovati bar jedan provajder (provider), a
provajder se može registrovati u modulu ili komponenti.
Kada se provajder dodaje root modulu, ista instanca servisa je dostupna svim komponentama
aplikacije.
Inicijalno, kada se kreira podrazumevani projekat, stavka „providers: []“ je prazna, tj. ne sadrži
nijedan servis. Ako su nam potrebni npr. BackendService, HeroService i Logger, dodajemo ih u
dekorator root modula:
providers: [
BackendService,
HeroService,
Logger
]
Kada se provajder registruje na nivou komponente, tada se za svaku instancu komponente
kreira nova instanca servisa. Kod komponente servisi se registruju unutar „providers“ atributa
@Component dekoratera:
@Component({
selector: 'app-hero-list',
templateUrl: './hero-list.component.html',
providers: [ HeroService ]
})