Skip to content

Latest commit

 

History

History
138 lines (92 loc) · 3.49 KB

L4_08.md

File metadata and controls

138 lines (92 loc) · 3.49 KB

Services

È una classe Angular utilizzata per implementare funzionalità indipendenti da una view specifica, o per fornire dati e logica condivisi per più componenti.

I services vengono iniettati in altri componenti o servizi tramite dependency injection.

La dependecy injection è un design pattern e un meccanismo per la creazione e la distribuzione di parti di una applicazione all'interno di altre parti che le richiedono.


Service

Un componente potrebbe avere la necessità di utilizzare un service per ottenere dei dati o per utilizzare delle funzioni.

Se un componente "A" si affida ad un altra entità "B", si dice che "A" dipende da "B" e che "B" è una dipendenza di "A".

Solitamente, i services sono parti di logica o dati che vengono condivisi in più componenti.

È logico inserirli in una cartella shared.

Non sempre, un service è condiviso per l'intera applicazione.


service file name

Il nome del file deve rispecchiare il seguente pattern:

service-name.service.ts

-src
--app
---shared
----logging.service.ts
 /* src/app/shared/logging.service.ts */
export class LoggingService {
}

providers

Il service, per poter essere utilizzato, va prima definito nell'array providers, all'interno del decorator @Component

/* src/app/app.component.ts */
import { Component } from '@angular/core';
import { LoggingService } from '../shared/logging.service';

@Component({
  providers:[LoggingService],
  ...
})
export class AppComponent {
}

dependency injection

Il service va poi iniettato, tramite dependency injection, nel componente tramite il suo costruttore

/* src/app/app.component.ts */
import { Component } from '@angular/core';
import { LoggingService } from '../shared/logging.service';

@Component({
  ...
})
export class AppComponent {
  constructor(private ls: LoggingService) {}
}

dependency injection gerarchica

La dependency injection in Angular è di tipo gerarchica: i figli del componente nel quale viene iniettato il service riceveranno automaticamente le funzionalità del servizio stesso.

Se ChildComponent è figlio di AppComponent (dove è stato iniettato il servizio) allora non è necessario includerlo nell'array providers

/* src/app/app.component.ts */
import { Component } from '@angular/core';
import { LoggingService } from '../shared/logging.service';

@Component({
  ...
})
export class ChildComponent {
  constructor(private ls: LoggingService) {}
}

@Injectable()

Il service, grazie ad @Injectable, può ricevere, tramite dependency injection, un altro service.

/* src/app/shared/logging.service.ts
*/
import { Injectable } from '@angular/core';
import { OtherService } from '../shared/other.service';

@Injecatable()
export class LoggingService {
  constructor(private os: OtherService) {}
}

Observables

Creare applicazioni moderne significa fare un passo avanti anche sui concetti oramai consolidati in programmazione.

Con le attuali esigenze degli utenti, le applicazioni devono essere sempre più reattive e, allo stesso tempo, essere leggere da caricare ed eseguire.

Con queste problematiche è nata la programmazione reattiva (Reactive Programming): un paradigma di programmazione che, più che basarsi sugli oggetti, si basa su flussi di dati (tipicamente asincroni) e sulla possibilità che più entità possano "abbonarsi" (subscribe) a questi flussi.