Servizi

23 giugno 2015

I servizi sono i componenti Angular che offrono funzionalità indipendenti dall’interfaccia utente. Essi, in genere, consentono di implementare la logica dell’applicazione, cioè le funzionalità che si occupano di elaborare e/o recuperare i dati da visualizzare sulle view tramite i controller.

Un altro ruolo che possiamo attribuire ai servizi è quello della condivisione di funzionalità accessibili dagli altri componenti dell’applicazione: controller, filtri, direttive o altri servizi. Per fare un esempio, supponiamo di aver bisogno di una funzione per il calcolo del codice fiscale a partire dai dati anagrafici di una persona e che tale funzione venga utilizzata da più componenti della nostra applicazione Angular. Il modo migliore di gestire questa esigenza è la sua implementazione come servizio.

Definire un servizio AngularJS

Da un punto di vista tecnico, i servizi AngularJS sono oggetti singleton: di essi, quindi, esisterà una sola istanza accessibile dagli altri componenti dell’applicazione. Le due principali modalità di creazione di un servizio utilizzano i metodi service() e factory() dell’applicazione Angular:

angular.module("myApp") 
	.service("nomeServizio1", function() { 
		//... 
	}); 
angular.module("myApp") 
	.factory("nomeServizio2", function() { 
		//... 
	}); 

La differenza tra le due modalità è abbastanza sottile ed è apprezzabile quando abbiamo esigenze particolari.

In sintesi, quando utilizziamo un servizio definito tramite il metodo service(), Angular ci fornisce un’istanza della funzione associata al servizio. Quando utilizziamo un servizio definito tramite il metodo factory(), Angular ci fornisce il valore restituito dall’esecuzione della funzione associata.

Consideriamo il seguente esempio:

angular.module("myApp") 
	.service("somma1", function() { 
		this.somma = function(a,b) { return a + b}; 
	});

angular.module("myApp") 
	.factory("somma2", function() { 
		return function(a, b) { return a + b;} 
	});

Per utilizzare uno o più servizi all’interno di un controller, specifichiamo il loro nome come argomenti del metodo controller(), sfruttando quindi la dependency injection come abbiamo visto per i filtri:

angular.module("myApp") 
	.controller("myController",   
    	function($scope, somma1, somma2) { 
    		$scope.x = somma1.somma(1,2); 
    		$scope.y = somma2(1,2) 
  	});

Possiamo vedere la diversa modalità di definizione ed utilizzo dei due servizi, pur facendo sostanzialmente la stessa cosa. Il servizio somma1 ci mette a disposizione un oggetto con un metodo per eseguire la somma di due numeri, mentre il servizio somma2 ci offre direttamente la funzione per sommare due numeri.

Quale dei due approcci scegliere per definire un servizio dipende essenzialmente da come vogliamo che esso venga utilizzato o per esigenze molto specifiche.

Tutte le lezioni

1 ... 14 15 16 ... 38

Se vuoi aggiornamenti su Servizi inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Servizi

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy