ერთი სერვისის მეორეში ინჟექცია 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('მონაცემები მიღებულია'); // გამოყენება
    return this.data;
  }
  
  addData(name: string){
    this.data.push(name);
    this.logService.write('ახალი ელემენტი დაემატა'); // გამოყენება
  }
}

თუმცა, ეს საკმარისი არ არის. საჭიროა ახალი სერვისის მითითება კომპონენტის კლასშიც, თუმცა ის იქ პირდაპირ და არ გამოიყენება:

app/app.component.tsimport { Component } from '@angular/core';
import {DataService} from './data.service';
import {LogService} from './log.service'; // იმპორტირება

@Component({
  ........
  providers: [DataService, LogService] // დამატება
})