Wstrzykiwanie jednego serwisu do drugiego w Angular
Do pracy nad projektem może być potrzebne wstrzyknięcie jednego serwisu do drugiego, aby rozszerzyć ich funkcjonalność. Stwórzmy kolejny serwis, który będzie wyświetlał komunikaty w konsoli przy dodawaniu nowych danych.
Najpierw w folderze test/src/app tworzymy
plik log.service.ts. Eksportujemy
klasę LogService, w której opiszemy
funkcję write do wyświetlania komunikatu
w konsoli:
import { Injectable } from '@angular/core';
@Injectable()
export class LogService {
write(message: string) {
console.log(message);
}
}
Następnie przechodzimy do naszego serwisu DataService
i importujemy, injektujemy oraz używamy
naszego nowego serwisu:
import { Injectable } from '@angular/core';
import { LogService } from './log.service'; // importujemy
@Injectable()
export class DataService {
private data: string[] = ['a', 'b', 'c'];
constructor(private logService: LogService) { // injektujemy
}
getData(): string[] {
this.logService.write('data received'); // używamy
return this.data;
}
addData(name: string){
this.data.push(name);
this.logService.write('new elem added'); // używamy
}
}
To jednak nie wystarczy. Trzeba jeszcze wpisać nowy serwis w klasie komponentu, chociaż nie jest on tam bezpośrednio używany:
import { Component } from '@angular/core';
import {DataService} from './data.service';
import {LogService} from './log.service'; // importujemy
@Component({
........
providers: [DataService, LogService] // dodajemy
})