Service e Factory 2102 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
- 02_Factory.html 3 KB) Download File
- 02_Service.html 3 KB) Download File