2014-12-10 15 views
22

Ho letto un paio di post riguardanti il ​​corretto utilizzo delle entità angularjs: servizi, fabbriche, controller e direttive.AngularJS: controller vs service

La mia preoccupazione particolare è un confronto tra un controller e un servizio. Tuttavia, nessuno dei post mi ha detto che cosa è un controller in grado di fare ciò che il servizio non può e vice versa.

Può essere elencato o è solo questione di essere canonici nell'uso di angular?

+3

Mi dispiace amico, ma Internet è pieno di questi confronti .. http://kirkbushell.me/when-to-use-directives-controllers-or-services-in-angular/ –

+3

@JasonvanderZeeuw To essere onesti, questo è il primo risultato che ho trovato quando ho cercato su Google. Quindi OP mi ha fatto un servizio chiedendo. – dwjohnston

+1

@JasonvanderZeeuw Non puoi semplicemente passare il link tranquillamente? –

risposta

51

I controllori vengono in genere utilizzati per essere associati a una vista. I controllori gestiscono il ciclo di vita di una vista e dovrebbero essere pensati come View Controller. Verrà creato un nuovo controller per ogni istanza di una vista, il che significa che se si allontana da una determinata vista, e quindi si torna indietro - o se si ha più di una istanza di una determinata vista, verrà creato un nuovo controller ogni volta .

I servizi vengono in genere utilizzati come logica aziendale dell'applicazione. I servizi sono simili ai singletons nel senso che vengono creati una sola volta e l'istanza viene mantenuta per l'intero ciclo di vita dell'applicazione. È un buon posto dove mettere le tue funzioni logiche che molte viste o componenti richiederanno, e tieni anche la cache globale a cui è necessario accedere in più aree della tua applicazione.

+3

Quindi la parola chiave è ** persistenza ** ... Grazie. – user776686

+0

Direi persistenza e la possibilità di fare riferimento a funzioni e variabili dalla vista utilizzando il metodo ng-controller = "MyController as ctrl" –

+1

Un'altra serie di parole chiave: ** codice/dati condivisi **. Oltre alla persistenza, una caratteristica importante di un servizio è che il suo codice può essere facilmente condiviso tra più controller/direttive/componenti/ecc.Ad esempio, in un'app che sto sviluppando in questo momento, ho un servizio per la mia API REST privata: questo servizio può essere iniettato e utilizzato ovunque. Cercare di fare lo stesso con un controller sarebbe inutilmente difficile. – rinogo

8

controller - responsabilità: inizializzare la visualizzazione, mediare l'interazione tra vista/ambito e servizi. Ha dipendenze dalla vista e dal modello, ma è più interessato alla vista e lo fa funzionare.

servizi - responsabilità: fornisce servizi di business che è non dipende la vista o il controller. La sua principale preoccupazione è la fornitura di servizi, indipendentemente dal consumatore (controller/view/altri servizi).

Non sono convinto se i fattori di persistenza nelle differenze.

8

Come per la documentazione AngularJS, https://docs.angularjs.org/guide/concepts

controllori sono a che fare con la logica di business legate vista. I servizi, d'altra parte, hanno a che fare con la logica aziendale riutilizzabile indipendentemente dalle visualizzazioni.

0

In aggiunta a quanto detto sopra. I controller possono anche mantenere la logica della tua applicazione mentre l'applicazione non è così grande. Ma man mano che l'applicazione cresce, è necessario spostare la logica per utilizzare i servizi (come fabbrica). Ciò consentirebbe alle variabili e alle funzioni necessarie attorno all'applicazione di essere facilmente accessibili.