Home Page Twitter Facebook Feed RSS
NotJustCode
Apri

Service e Factory 2106 Visite) AngularJs

I controller AngularJS sono studiati per fornire un'interfaccia per le maschere HTML fornendo variabili e metodi. Nonostante molti li utilizzino per gestire la logica applicativa, non sono stati pensati per questo scopo. AngularJS ci fornisce altri oggetti: i factory ed i service. Questi hanno alcune caratteristiche : possono essere condivise tra controller (ed altri factory e service) e rimangono attivi per tutta la vita dell'applicazione (fondamentale per applicazioni single page in cui cambiano i controller e occorre conservare informazioni).

Creiamo un factory

app.factory("mailFactory", function () {

var factory = {};

factory.messages = [];

factory.Send = function (subject, text) {

factory.messages.push({ subject: subject, text: text });

};

return factory;

});

in questo esempio abbiamo aggiunto un factory al nostro progetto. Come vedete questo restituisce un oggetto con variabili e funzioni.

Ora creiamo il controller passandogli il factory

app.controller('senderController', ['mailFactory', '$scope', function (mailFactory, $scope) {

.....

}]);

Il controller ora, oltre allo scope, ha anche il factory. Come vedete in questa forma gli oggetti da utilizzare sono definiti per nome e quindi richiamati nella funzione. Non è necessario che abbiano lo stesso nome degli oggetti, l'importante è la posizione.

Utilizzando più controller potrete condividere variabili e far comunicare i controller tra di loro.

Per i servizi invece dovete utilizzare questa sintassi

app.service("mailService", function () {

this.messages = [];

this.Send = function (subject, text) {

this.messages.push({ subject: subject, text: text });

};

});

 

Il loro utilizzo però rimane identico nei controller.

Factory vs Service

Le due modalità sono pressoché identiche. Il factory é una funzione che restituisce un oggetto, il service é un oggetto che viene istanziato da AngulaJs. I factory, per come sono strutturati permettono di eseguire codice prima di essere istanziati ma a parte questo non c'è molto altro.

Entrambi sono comunque singleton, esiste una sola istanza che viene condivisa tra i controller. Sarà qui che si andrà a gestire la logica dell'applicazione e le chiamate al server via Ajax.

Vi lascio agli esempi