Per i metodi di utilità, li organizzerei in una libreria esterna al framework Angular, ma con una piccola dipendenza da angular.extend. Se vuoi che la tua libreria sia completamente indipendente da Angular, puoi sostituire extend
con la tua implementazione.
avvolgere l'API di utilità in un recinto Javascript e esporre la libreria come una proprietà di window
(nell'esempio qui sotto, ho chiamato il mio biblioteca MyLibrary, ma sei libero di scegliere quale nome). Se si collega la libreria come proprietà di window
, sarà possibile fare riferimento a "myLibrary" senza qualificazione. Se sei curioso, questo è esattamente il modo in cui è esposta la libreria angolare .
(function (window, document) {
'use strict';
// attach myLibrary as a property of window
var myLibrary = window.myLibrary || (window.myLibrary = {});
// BEGIN API
function helloWorld() {
alert('hello world!');
}
function utilityMethod1() {
alert('Utility Method 1');
}
function utilityMethod2() {
alert('Utility Method 2');
}
// END API
// publish external API by extending myLibrary
function publishExternalAPI(myLibrary) {
angular.extend(myLibrary, {
'helloWorld': helloWorld,
'utilityMethod1': utilityMethod1,
'utilityMethod2': utilityMethod2
});
}
publishExternalAPI(myLibrary);
})(window, document);
Uso
Una volta aggiunto lo script, è possibile utilizzare la libreria da qualsiasi luogo - servizi, fabbriche, fornitori, regolatori, direttive ecc
<script type='text/javascript' src='angular.js'></script>
<script type='text/javascript' src='myLibrary.js'></script>
<script>
myLibrary.helloWorld();
myLibrary.utilityMethod1();
myLibrary.utilityMethod2();
</script>
Utility Biblioteca vs Servizi angolari
Il motivo per cui preferisco l'utilità funzioni di risiedere nella propria libreria piuttosto che in servizi angolari è perché li considero separati dall'ecosistema angolare. Queste funzioni di utilità sono praticamente indipendenti e indipendenti dal modulo, mentre i servizi/fabbriche angolari lavorano a stretto contatto con altre parti angolari, compresi i controller e le direttive, e sono strettamente legate al modulo.
L'estensione angolare
Se si voleva davvero, si potrebbe anche estendere la libreria angolare in sé. Basta sostituire myLibrary
con angular
nello script (Nota: questo potrebbe non essere consigliabile in quanto renderebbe gli script dipendenti dall'implementazione Angolare).
Questa è davvero una buona idea. C'è un modo di utilizzare un servizio Angolare nel codice esterno? – Sprottenwels
Esiste, ma è necessario utilizzare $ injector di angular: var $ injector = angular.injector(); var myService = $ injector.get ('myService'); – pixelbits
Ho problemi a restituire un valore dalle funzioni API. Ho confermato che la funzione API viene chiamata ma dal chiamante, il valore restituito è * undefined *. Mi manca qualcosa? – Unplug