SlideShare a Scribd company logo
Servizi
Service e Dependency Injection
ApuliaSoft
apuliasoft.com
Agenda
Servizi
Cosa sono e perché
01
Dependency Injection
Concetti chiave e implementazione in Angular
02
HTTP
Gestione chiamate HTTP
03
Servizi
Big Picture
L’idea alla base
Components
TemplateDirectives
Services
Injector
Event
binding
Property
binding
Servizi
Classe ben definite e con uno scopo
specifico
Logica di business
01
Riuso all’interno dell’applicazione
DRY
02
Facile da testare
Unit Test
03
Servizi
Genera il file nome-del-servizio.service.ts
ng generate service nome-del-servizio
import { Injectable } from '@angular/core';
@Injectable()
export class LoggerService {
constructor() { }
}
Servizi
Genera il file nome-del-servizio.service.ts
ng generate service nome-del-servizio
import { Injectable } from '@angular/core';
@Injectable()
export class LoggerService {
constructor() { }
}
Metadati per Dependency Injection
@Injectable()
Challenge
Creiamo un servizio
Challenge
VS Code
• Fare il checkout dal tag services-start
• Creare un nuovo servizio con nome Api utilizzando Angular CLI. Il
servizio dovrà implementare le chiamate alle API per otterene i dati e
effettuare l’upvote.
• Importare il database nel servizio
• Definire il metodo pubblico getLinks(page: number) nel servizio
creato. Dovrà restituire i Link dal database
• Rimuovere DATABASE da link-list.component.ts, istanziare il
servizio e utilizzare il metodo getLinks
• Definire il metodo pubblico upvote(id: number) nel servizio. Dovrà
implementare la logica di upvoted, definita in link-list.component.ts
• Istanziare il servizio e utilizzare il metodo upvote, ridefinendo
l'implementazione di upvote in link-item.component.ts. Eliminare la
proprietà upvoted di tipo EventEmitter in questo componente
Adesso tocca a voi
Dependency Injection
Dependency
Injection
“dependency injection is a technique whereby one object (or static
method) supplies the dependencies of another object.”
Definizione
Dependency
Injection
“dependency injection is a technique whereby one object (or static
method) supplies the dependencies of another object.”
“A dependency is an object that can be used (a service). An injection is
the passing of a dependency to a dependent object (a client) that would
use it. The service is made part of the client's state. Passing the service
to the client, rather than allowing a client to build or find the service, is
the fundamental requirement of the pattern”
Wikipedia
Definizione
Dependency
Injection
• Design pattern (a.k.a. DI)
• Disaccoppiamento tra gli oggetti
• Interface
• Implementazione Inversion of Control (IoC)
• Tre tipologie di Injector
• Setter
• Interface
• Constructor
• Built-in in Angular
Concetti chiave
Perché DI?
Dependency Injection
Perché DI?
export class Car {
engine: Engine;
steering: SteeringWheel;
constructor() {
this.engine = new Engine();
this.steering = new SteeringWheel();
}
powerOn() {
this.engine.powerOn();
}
}
Dependency Injection
Perché DI?
Classe difficile da testare
Test
export class Car {
engine: Engine;
steering: SteeringWheel;
constructor() {
this.engine = new Engine();
this.steering = new SteeringWheel();
}
powerOn() {
this.engine.powerOn();
}
}
Dependency Injection
Perché DI?
Classe difficile da testare
Test
Non aperta al cambiamento
Fragile
export class Car {
engine: Engine;
steering: SteeringWheel;
constructor() {
this.engine = new Engine();
this.steering = new SteeringWheel();
}
powerOn() {
this.engine.powerOn();
}
}
Dependency Injection
Perché DI?
Classe difficile da testare
Test
Non aperta al cambiamento
Fragile
export class Car {
engine: Engine;
steering: SteeringWheel;
constructor() {
this.engine = new Engine();
this.steering = new SteeringWheel();
}
powerOn() {
this.engine.powerOn();
}
}
Legata alla implementazione della
dipendenza
Non flessibile
Dependency Injection
Perché DI?
Passo le dipendenze al costruttore
Dipendenze nel costruttore
Semplifico il test, mockando le dipendenze
Test
export class Car {
constructor(
public engine: Engine,
public steering: SteeringWheel
) {}
powerOn() {
this.engine.powerOn();
}
}
Utilizzo di interface al posto di classe
concrete
Estendibile
Dependency Injection
Perché DI?
Passo le dipendenze al costruttore
Dipendenze nel costruttore
Semplifico il test, mockando le dipendenze
Test
export class Car {
constructor(
public engine: Engine,
public steering: SteeringWheel
) {}
powerOn() {
this.engine.powerOn();
}
}
let car = new Car(new Engine(), new SteeringWheel())
;
Utilizzo di interface al posto di classe
concrete
Estendibile
Dependency Injection
Perché DI?
Espone metodi per creare gli oggetti
necessari
Factory Pattern
export class CarFactory {
createCar() {
return new Car(
this.createEngine(),
this.createSteeringWheel()
);
}
createEngine() {
return new Engine();
}
createSteeringWheel() {
return new SteeringWheel();
}
}
Dependency Injection
Perché DI?
Espone metodi per creare gli oggetti
necessari
Factory Pattern
La classe factory può crescere con lo
sviluppo del progetto
Code smell
export class CarFactory {
createCar() {
return new Car(
this.createEngine(),
this.createSteeringWheel()
);
}
createEngine() {
return new Engine();
}
createSteeringWheel() {
return new SteeringWheel();
}
}
let car = new CarFactory().createCar();
Dependency Injection
Perché DI?
Espone metodi per creare gli oggetti
necessari
Factory Pattern
La classe factory può crescere con lo
sviluppo del progetto
Code smell
let car = container.get(Car);
Chiedo al container una istanza di Car
DI
DI in Angular
Dependency Injection
DI in Angular
import { Injectable } from '@angular/core';
@Injectable()
export class LoggerService {
constructor() { }
log(msg: any) { console.log(msg); }
error(msg: any) { console.error(msg); }
warn(msg: any) { console.warn(msg); }
}
Utilizzando Angular CLI
Creare un Service
Dependency Injection
DI in Angular
Utilizzando Angular CLI
Creare un Service
Definire un provider per l’injector
Registrare un Service
…
providers: [LoggerService]
…
Dependency Injection
DI in Angular
Utilizzando Angular CLI
Creare un Service
Definire un provider per l’injector
Registrare un Service
…
constructor(private logger: LoggerService) { }
…
Definire il paramentro tipo richiesto nel
costruttore della classe dipendente
Ingettare il Service
Dependency
Injection
DI in Angular
• Registrare un Service Provider
• @Component
• @ngModule
• Dependency Injection Gerarchica
• Tree-model
• Child Injector
• Injector bubbling
• Singleton nello scope
• Testabilità
• @Injectable()
Challenge
Utilizziamo la Dependency Injection
Challenge
VS Code
• Aggiungere il provider per ApiService in app.module.ts
• Iniettare il servizio ApiService nel costruttore dei componenti che lo
utilizzano. Rimuovere l'istanziazione di ApiService, sostituendola con
il servizio iniettato
• Creare un nuovo servizio con nome Logger utilizzando Angular CLI
• Implementare in LoggerService la proprietà privata counter
• Implementare in LoggerService le seguenti funzioni. Ogni funzione
deve incrementare la proprietà counter, stampare il valore di counter
e del messaggio
• log(e)
• warn(e)
• error(e)
• Definire il provider di LoggerService nel decoratore @NgModule
• Iniettare il servizio LoggerService nel costruttore dei componenti
• Utilizzare la funzione log di LoggerService nei metodi changePage e
upvote definiti nei component
• Sperimenta! Definire il provider di LoggerService nel decoratore
@Component in uno due componenti. Cosa accade?
Adesso tocca a voi
HTTP
HTTP
HttpModule
@NgModule({
declarations: [
AppComponent,
LinkListComponent,
LinkItemComponent,
MomentPipe
],
imports: [
BrowserModule,
HttpModule
],
providers: [ApiService, LoggerService],
bootstrap: [AppComponent]
})
Definire in import di @NgModule dopo
BrowserModule
Importare HttpModule da @angular/http
Iniettare nel costruttore di un componente
o di un altro servizio
Iniettare il servizio Http
GET, POST, PUT, DELETE, gestione degli
HEADER
Gestire le chiamate HTTP
HTTP
HttpModule
class Http {
constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions)
request(url: string|Request, options?: RequestOptionsArgs) : Observable<Response>
get(url: string, options?: RequestOptionsArgs) : Observable<Response>
post(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response>
put(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response>
delete(url: string, options?: RequestOptionsArgs) : Observable<Response>
patch(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response>
head(url: string, options?: RequestOptionsArgs) : Observable<Response>
options(url: string, options?: RequestOptionsArgs) : Observable<Response>
}
Definire in import di @NgModule dopo
BrowserModule
Importare HttpModule da @angular/http
Iniettare nel costruttore di un componente
o di un altro servizio
Iniettare il servizio Http
GET, POST, PUT, DELETE, gestione degli
HEADER
Gestire le chiamate HTTP
HTTP
HttpModule
import {Http, HTTP_PROVIDERS} from '@angular/http';
import 'rxjs/add/operator/map'
@Component({
selector: 'http-app',
viewProviders: [HTTP_PROVIDERS],
templateUrl: 'people.html'
})
class PeopleComponent {
constructor(http: Http) {
http.get('people.json')
// Effettua il parsing sul response body e restituisce un oggetto
.map(res => res.json())
// Subscribe all’observable per acquisire l’oggetto restituito dalla
funzione map
.subscribe(people => this.people = people);
}
}
Definire in import di @NgModule dopo
BrowserModule
Importare HttpModule da @angular/http
Iniettare nel costruttore di un componente
o di un altro servizio
Iniettare il servizio Http
GET, POST, PUT, DELETE, gestione degli
HEADER
Gestire le chiamate HTTP
HTTP
HttpClientModule dalla versione 4.3 in poi
@NgModule({
declarations: [
AppComponent,
LinkListComponent,
LinkItemComponent,
MomentPipe
],
imports: [
BrowserModule,
HttpClientModule
],
providers: [ApiService, LoggerService],
bootstrap: [AppComponent]
})
Importare HttpClientModule da
@angular/common/http
Iniettare nel costruttore di un componente
o di un altro servizio
Iniettare il servizio HttpClient
GET, POST, PUT, DELETE, gestione degli
HEADER
Gestire le chiamate HTTP
Challenge
Utilizziamo HTTP
Challenge
VS Code
• Importare il modulo HttpModule da @angular/http e dichiararlo
nell'array imports del decoratore @NgModule in app.module.ts
• Iniettare il servizio Http, importato da @angular/http, nel costruttore
di ApiService
• Creare il file constant.ts e esportare una costante, API_URI, il cui
valore é https://as-hackernews.herokuapp.com
• Modificare il metodo getLinks di ApiService affinché effettui una
chiamata GET al server alla URL API_URI/link?q=page e ne gestisca
opportunamente il risultato
• Modificare il metodo upvote di ApiService affinché salvi l'upvote con
una chiamata POST al server alla URL API_URI/link/id/upvote e ne
gestisca opportunamente il risultato
Adesso tocca a voi
Grazie per la partecipazione

More Related Content

PDF
Angular Components e Pipe
PDF
Components
PPTX
Meetup ASP.NET Core Angular
PDF
Introduzione ai componenti in Angular 4
PDF
Introduzioni ai services in Angular 4 e ad RxJS
PDF
Angular 4 - convertire o migrare un'applicazione Angularjs
ODP
Corso angular js componenti
PPT
Zend Framework Workshop Parte2
Angular Components e Pipe
Components
Meetup ASP.NET Core Angular
Introduzione ai componenti in Angular 4
Introduzioni ai services in Angular 4 e ad RxJS
Angular 4 - convertire o migrare un'applicazione Angularjs
Corso angular js componenti
Zend Framework Workshop Parte2

What's hot (10)

PPT
Spring 2.5
PDF
Modulo 6 Spring Framework Core E Aop
PDF
Zend Framework Workshop Parte1
PDF
"Angular CLI: come gestire un progetto" by Mirko Porcu
PPT
Alla scoperta di Zend Framework 1.8
PDF
Spring Intro
PDF
SPRING - MAVEN - REST API (ITA - Luglio 2017)
PDF
Un backend per tutte le stagioni con Spring
PDF
Introduzione ad Angular CLI
PPTX
ASP.NET MVC
Spring 2.5
Modulo 6 Spring Framework Core E Aop
Zend Framework Workshop Parte1
"Angular CLI: come gestire un progetto" by Mirko Porcu
Alla scoperta di Zend Framework 1.8
Spring Intro
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Un backend per tutte le stagioni con Spring
Introduzione ad Angular CLI
ASP.NET MVC
Ad

Similar to Servizi e Dependency Injection in Angular (20)

PDF
Angular: Servizi e DI
PPSX
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
PPTX
Cert03 70-486 developing asp.net mvc 4 web applications
PPTX
Novità di Asp.Net 4.0
PDF
ASP.NET Core - dove siamo arrivati
PDF
AngularJS-Intro
PPTX
ASP.NET MVC: Andare oltre il 100% (Web@work)
ODP
PDF
Introduzione ad angular 7/8
PDF
Dependency injection questa sconosciuta
PDF
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
PPTX
Le novita di visual studio 2012
PPTX
Asp.Net MVC 2 :: VS 2010 Community Tour
PPTX
Integrazione continua con TFS Build
PPTX
Asp.net 4 Community Tour VS2010
PDF
Hands on MVC - Mastering the Web
PPTX
ASP.NET MVC 6 - uno sguardo al futuro
PDF
Cloud Journey e IT Modernization: Da app monolitica a microservizi. vFunction...
PDF
Cloud Journey e IT Modernization: Da app monolitica a microservizi. vFunction...
PPT
3DD 1e Reconfig
Angular: Servizi e DI
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Cert03 70-486 developing asp.net mvc 4 web applications
Novità di Asp.Net 4.0
ASP.NET Core - dove siamo arrivati
AngularJS-Intro
ASP.NET MVC: Andare oltre il 100% (Web@work)
Introduzione ad angular 7/8
Dependency injection questa sconosciuta
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Le novita di visual studio 2012
Asp.Net MVC 2 :: VS 2010 Community Tour
Integrazione continua con TFS Build
Asp.net 4 Community Tour VS2010
Hands on MVC - Mastering the Web
ASP.NET MVC 6 - uno sguardo al futuro
Cloud Journey e IT Modernization: Da app monolitica a microservizi. vFunction...
Cloud Journey e IT Modernization: Da app monolitica a microservizi. vFunction...
3DD 1e Reconfig
Ad

More from Valerio Como (7)

PPTX
Deepfake: profondo falso
PDF
Introduzione al software libero
PDF
Web Assembly
PPTX
Yeoman generator
PDF
Git flow
PPT
Risoluzione DNS per IPv6: sperimentazione nella rete del dominio uniba.it
PDF
Autenticazione nei sistemi distribuiti: da Kerberos ai sistemi service oriented
Deepfake: profondo falso
Introduzione al software libero
Web Assembly
Yeoman generator
Git flow
Risoluzione DNS per IPv6: sperimentazione nella rete del dominio uniba.it
Autenticazione nei sistemi distribuiti: da Kerberos ai sistemi service oriented

Servizi e Dependency Injection in Angular

  • 1. Servizi Service e Dependency Injection ApuliaSoft apuliasoft.com
  • 2. Agenda Servizi Cosa sono e perché 01 Dependency Injection Concetti chiave e implementazione in Angular 02 HTTP Gestione chiamate HTTP 03
  • 4. Big Picture L’idea alla base Components TemplateDirectives Services Injector Event binding Property binding
  • 5. Servizi Classe ben definite e con uno scopo specifico Logica di business 01 Riuso all’interno dell’applicazione DRY 02 Facile da testare Unit Test 03
  • 6. Servizi Genera il file nome-del-servizio.service.ts ng generate service nome-del-servizio import { Injectable } from '@angular/core'; @Injectable() export class LoggerService { constructor() { } }
  • 7. Servizi Genera il file nome-del-servizio.service.ts ng generate service nome-del-servizio import { Injectable } from '@angular/core'; @Injectable() export class LoggerService { constructor() { } } Metadati per Dependency Injection @Injectable()
  • 9. Challenge VS Code • Fare il checkout dal tag services-start • Creare un nuovo servizio con nome Api utilizzando Angular CLI. Il servizio dovrà implementare le chiamate alle API per otterene i dati e effettuare l’upvote. • Importare il database nel servizio • Definire il metodo pubblico getLinks(page: number) nel servizio creato. Dovrà restituire i Link dal database • Rimuovere DATABASE da link-list.component.ts, istanziare il servizio e utilizzare il metodo getLinks • Definire il metodo pubblico upvote(id: number) nel servizio. Dovrà implementare la logica di upvoted, definita in link-list.component.ts • Istanziare il servizio e utilizzare il metodo upvote, ridefinendo l'implementazione di upvote in link-item.component.ts. Eliminare la proprietà upvoted di tipo EventEmitter in questo componente Adesso tocca a voi
  • 11. Dependency Injection “dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object.” Definizione
  • 12. Dependency Injection “dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object.” “A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client's state. Passing the service to the client, rather than allowing a client to build or find the service, is the fundamental requirement of the pattern” Wikipedia Definizione
  • 13. Dependency Injection • Design pattern (a.k.a. DI) • Disaccoppiamento tra gli oggetti • Interface • Implementazione Inversion of Control (IoC) • Tre tipologie di Injector • Setter • Interface • Constructor • Built-in in Angular Concetti chiave
  • 15. Dependency Injection Perché DI? export class Car { engine: Engine; steering: SteeringWheel; constructor() { this.engine = new Engine(); this.steering = new SteeringWheel(); } powerOn() { this.engine.powerOn(); } }
  • 16. Dependency Injection Perché DI? Classe difficile da testare Test export class Car { engine: Engine; steering: SteeringWheel; constructor() { this.engine = new Engine(); this.steering = new SteeringWheel(); } powerOn() { this.engine.powerOn(); } }
  • 17. Dependency Injection Perché DI? Classe difficile da testare Test Non aperta al cambiamento Fragile export class Car { engine: Engine; steering: SteeringWheel; constructor() { this.engine = new Engine(); this.steering = new SteeringWheel(); } powerOn() { this.engine.powerOn(); } }
  • 18. Dependency Injection Perché DI? Classe difficile da testare Test Non aperta al cambiamento Fragile export class Car { engine: Engine; steering: SteeringWheel; constructor() { this.engine = new Engine(); this.steering = new SteeringWheel(); } powerOn() { this.engine.powerOn(); } } Legata alla implementazione della dipendenza Non flessibile
  • 19. Dependency Injection Perché DI? Passo le dipendenze al costruttore Dipendenze nel costruttore Semplifico il test, mockando le dipendenze Test export class Car { constructor( public engine: Engine, public steering: SteeringWheel ) {} powerOn() { this.engine.powerOn(); } } Utilizzo di interface al posto di classe concrete Estendibile
  • 20. Dependency Injection Perché DI? Passo le dipendenze al costruttore Dipendenze nel costruttore Semplifico il test, mockando le dipendenze Test export class Car { constructor( public engine: Engine, public steering: SteeringWheel ) {} powerOn() { this.engine.powerOn(); } } let car = new Car(new Engine(), new SteeringWheel()) ; Utilizzo di interface al posto di classe concrete Estendibile
  • 21. Dependency Injection Perché DI? Espone metodi per creare gli oggetti necessari Factory Pattern export class CarFactory { createCar() { return new Car( this.createEngine(), this.createSteeringWheel() ); } createEngine() { return new Engine(); } createSteeringWheel() { return new SteeringWheel(); } }
  • 22. Dependency Injection Perché DI? Espone metodi per creare gli oggetti necessari Factory Pattern La classe factory può crescere con lo sviluppo del progetto Code smell export class CarFactory { createCar() { return new Car( this.createEngine(), this.createSteeringWheel() ); } createEngine() { return new Engine(); } createSteeringWheel() { return new SteeringWheel(); } } let car = new CarFactory().createCar();
  • 23. Dependency Injection Perché DI? Espone metodi per creare gli oggetti necessari Factory Pattern La classe factory può crescere con lo sviluppo del progetto Code smell let car = container.get(Car); Chiedo al container una istanza di Car DI
  • 25. Dependency Injection DI in Angular import { Injectable } from '@angular/core'; @Injectable() export class LoggerService { constructor() { } log(msg: any) { console.log(msg); } error(msg: any) { console.error(msg); } warn(msg: any) { console.warn(msg); } } Utilizzando Angular CLI Creare un Service
  • 26. Dependency Injection DI in Angular Utilizzando Angular CLI Creare un Service Definire un provider per l’injector Registrare un Service … providers: [LoggerService] …
  • 27. Dependency Injection DI in Angular Utilizzando Angular CLI Creare un Service Definire un provider per l’injector Registrare un Service … constructor(private logger: LoggerService) { } … Definire il paramentro tipo richiesto nel costruttore della classe dipendente Ingettare il Service
  • 28. Dependency Injection DI in Angular • Registrare un Service Provider • @Component • @ngModule • Dependency Injection Gerarchica • Tree-model • Child Injector • Injector bubbling • Singleton nello scope • Testabilità • @Injectable()
  • 30. Challenge VS Code • Aggiungere il provider per ApiService in app.module.ts • Iniettare il servizio ApiService nel costruttore dei componenti che lo utilizzano. Rimuovere l'istanziazione di ApiService, sostituendola con il servizio iniettato • Creare un nuovo servizio con nome Logger utilizzando Angular CLI • Implementare in LoggerService la proprietà privata counter • Implementare in LoggerService le seguenti funzioni. Ogni funzione deve incrementare la proprietà counter, stampare il valore di counter e del messaggio • log(e) • warn(e) • error(e) • Definire il provider di LoggerService nel decoratore @NgModule • Iniettare il servizio LoggerService nel costruttore dei componenti • Utilizzare la funzione log di LoggerService nei metodi changePage e upvote definiti nei component • Sperimenta! Definire il provider di LoggerService nel decoratore @Component in uno due componenti. Cosa accade? Adesso tocca a voi
  • 31. HTTP
  • 32. HTTP HttpModule @NgModule({ declarations: [ AppComponent, LinkListComponent, LinkItemComponent, MomentPipe ], imports: [ BrowserModule, HttpModule ], providers: [ApiService, LoggerService], bootstrap: [AppComponent] }) Definire in import di @NgModule dopo BrowserModule Importare HttpModule da @angular/http Iniettare nel costruttore di un componente o di un altro servizio Iniettare il servizio Http GET, POST, PUT, DELETE, gestione degli HEADER Gestire le chiamate HTTP
  • 33. HTTP HttpModule class Http { constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions) request(url: string|Request, options?: RequestOptionsArgs) : Observable<Response> get(url: string, options?: RequestOptionsArgs) : Observable<Response> post(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response> put(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response> delete(url: string, options?: RequestOptionsArgs) : Observable<Response> patch(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response> head(url: string, options?: RequestOptionsArgs) : Observable<Response> options(url: string, options?: RequestOptionsArgs) : Observable<Response> } Definire in import di @NgModule dopo BrowserModule Importare HttpModule da @angular/http Iniettare nel costruttore di un componente o di un altro servizio Iniettare il servizio Http GET, POST, PUT, DELETE, gestione degli HEADER Gestire le chiamate HTTP
  • 34. HTTP HttpModule import {Http, HTTP_PROVIDERS} from '@angular/http'; import 'rxjs/add/operator/map' @Component({ selector: 'http-app', viewProviders: [HTTP_PROVIDERS], templateUrl: 'people.html' }) class PeopleComponent { constructor(http: Http) { http.get('people.json') // Effettua il parsing sul response body e restituisce un oggetto .map(res => res.json()) // Subscribe all’observable per acquisire l’oggetto restituito dalla funzione map .subscribe(people => this.people = people); } } Definire in import di @NgModule dopo BrowserModule Importare HttpModule da @angular/http Iniettare nel costruttore di un componente o di un altro servizio Iniettare il servizio Http GET, POST, PUT, DELETE, gestione degli HEADER Gestire le chiamate HTTP
  • 35. HTTP HttpClientModule dalla versione 4.3 in poi @NgModule({ declarations: [ AppComponent, LinkListComponent, LinkItemComponent, MomentPipe ], imports: [ BrowserModule, HttpClientModule ], providers: [ApiService, LoggerService], bootstrap: [AppComponent] }) Importare HttpClientModule da @angular/common/http Iniettare nel costruttore di un componente o di un altro servizio Iniettare il servizio HttpClient GET, POST, PUT, DELETE, gestione degli HEADER Gestire le chiamate HTTP
  • 37. Challenge VS Code • Importare il modulo HttpModule da @angular/http e dichiararlo nell'array imports del decoratore @NgModule in app.module.ts • Iniettare il servizio Http, importato da @angular/http, nel costruttore di ApiService • Creare il file constant.ts e esportare una costante, API_URI, il cui valore é https://as-hackernews.herokuapp.com • Modificare il metodo getLinks di ApiService affinché effettui una chiamata GET al server alla URL API_URI/link?q=page e ne gestisca opportunamente il risultato • Modificare il metodo upvote di ApiService affinché salvi l'upvote con una chiamata POST al server alla URL API_URI/link/id/upvote e ne gestisca opportunamente il risultato Adesso tocca a voi
  • 38. Grazie per la partecipazione

Editor's Notes

  • #34: https://v2.angular.io/docs/ts/latest/api/http/index/Http-class.html