Injektion af en service i en anden i Angular

For at arbejde på projektet kan vi have brug for at injicere en service i en anden for at udvide deres funktionalitet. Lad os oprette endnu en service, som vil udskrive beskeder i konsollen, når der tilføjes nye data.

Først i mappen test/src/app opretter vi filen log.service.ts. Vi eksporterer klassen LogService, hvor vi skriver funktionen write for at udskrive en besked i konsollen:

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

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

Dernæst går vi til vores service DataService og importerer, injicerer og bruger vores nye service:

app/data.service.tsimport { Injectable } from '@angular/core';
import { LogService } from './log.service'; // importerer

@Injectable()
export class DataService {
  private data: string[] = ['a', 'b', 'c'];
  
  constructor(private logService: LogService) { // injicerer
    
  }
  
  getData(): string[] {
    this.logService.write('data modtaget'); // bruger
    return this.data;
  }
  
  addData(name: string){
    this.data.push(name);
    this.logService.write('nyt element tilføjet'); // bruger
  }
}

Dette er dog ikke nok. Vi skal også registrere den nye service i komponentklassen, selvom den ikke direkte bruges der:

app/app.component.tsimport { Component } from '@angular/core';
import {DataService} from './data.service';
import {LogService} from './log.service'; // importerer

@Component({
  ........
  providers: [DataService, LogService] // tilføjer
})