Posso rendere una funzione disponibile in ogni controller in modo angular?

Se ho una funzione di utilità foo che voglio essere in grado di chiamare da qualsiasi parte all’interno della mia dichiarazione di ng-app . È in qualche modo ansible renderlo globalmente accessibile nella configurazione del mio modulo o devo aggiungerlo all’oscilloscopio in ogni controller?

Fondamentalmente hai due opzioni, che puoi definire come un servizio, o metterlo nella tua portata di root. Ti suggerisco di creare un servizio per evitare di inquinare l’ambito di root. Crei un servizio e lo rendi disponibile nel tuo controller in questo modo:

            

Se questa non è un’opzione per te, puoi aggiungerla all’ambito di root in questo modo:

            

In questo modo, tutti i tuoi modelli possono chiamare globalFoo() senza doverli passare al modello dal controller.

Puoi anche combinarli immagino:

            

Sebbene il primo approccio sia sostenuto come approccio “angular come”, ritengo che questo aggiunga costi generali.

Considera se voglio usare questa funzione di myservice.foo in 10 diversi controller. Dovrò specificare questa dipendenza ‘myService’ e quindi $ scope.callFoo scope in tutti e dieci. Questa è semplicemente una ripetizione e in qualche modo viola il principio ASCIUTTO.

Considerando che, se utilizzo l’approccio $ rootScope, specificherò questa funzione globale gobalFoo una sola volta e sarà disponibile in tutti i miei futuri controller, indipendentemente da quanti.

AngularJs ha ” Servizi ” e ” Fabbriche ” solo per problemi come il tuo. Questi sono usati per avere qualcosa di globale tra Controllori, Direttive, Altri Servizi o qualsiasi altro componente angularjs. Puoi definire funzioni, memorizzare dati, eseguire funzioni di calcolo o qualsiasi cosa tu desidera all’interno dei Servizi e usarli in Componenti AngularJs come Global .like

 angular.module('MyModule', [...]) .service('MyService', ['$http', function($http){ return { users: [...], getUserFriends: function(userId){ return $http({ method: 'GET', url: '/api/user/friends/' + userId }); } .... } }]) 

se hai bisogno di più

Ulteriori informazioni su perché abbiamo bisogno di servizi e fabbriche di AngularJs

Sono un po ‘più nuovo di Angular ma quello che ho trovato utile (e piuttosto semplice) è che ho creato uno script globale che carico sulla mia pagina prima dello script locale con variabili globali che devo comunque accedere su tutte le pagine. In quello script, ho creato un object chiamato “globalFunctions” e ho aggiunto le funzioni di cui ho bisogno per accedere globalmente come proprietà. es. globalFunctions.foo = myFunc(); . Quindi, in ogni script locale, ho scritto $scope.globalFunctions = globalFunctions; e ho immediatamente accesso a qualsiasi funzione che ho aggiunto all’object globalFunctions nello script globale.

Questo è un po ‘una soluzione e non sono sicuro che ti sia d’aiuto ma sicuramente mi ha aiutato poiché avevo molte funzioni ed è stato un problema aggiungerle tutte in ogni pagina.