Внедряване на един сервис в друг в Angular

За работа по проекта може да се наложи да внедрим един сервис в друг, за да разширим тяхната функционалност. Нека направим още един сервис, който ще извежда съобщения в конзолата при добавяне на нови данни.

Първо в папката test/src/app създаваме файл log.service.ts. Експортираме клас LogService, в който ще напишем функция write за извеждане на съобщение в конзолата:

log.service.tsimport { Injectable } from '@angular/core';

@Injectable()
export class LogService {
  write(message: string) {
    console.log(message);
  }
}

След това отиваме в нашия сервис DataService и импортираме, инжектираме и използваме нашия нов сервис:

app/data.service.tsimport { Injectable } from '@angular/core';
import { LogService } from './log.service'; // импортираме

@Injectable()
export class DataService {
  private data: string[] = ['a', 'b', 'c'];
  
  constructor(private logService: LogService) { // инжектираме
    
  }
  
  getData(): string[] {
    this.logService.write('data received'); // използваме
    return this.data;
  }
  
  addData(name: string){
    this.data.push(name);
    this.logService.write('new elem added'); // използваме
  }
}

Това обаче не е достатъчно. Трябва също да се добави новият сервис и в класа на компонента, въпреки че той не се използва директно там:

app/app.component.tsimport { Component } from '@angular/core';
import {DataService} from './data.service';
import {LogService} from './log.service'; // импортираме

@Component({
  ........
  providers: [DataService, LogService] // добавяме
})