Posso disponibilizar uma function em todos os controladores em angular?

Se eu tenho uma function utilitária que eu quero ser capaz de chamar de qualquer lugar dentro da minha declaração ng-app . Existe alguma maneira que eu possa torná-lo globalmente acessível na minha configuração do módulo ou eu preciso adicioná-lo ao escopo em cada controlador?

Você basicamente tem duas opções, seja defini-lo como um serviço ou colocá-lo no seu escopo raiz. Eu sugiro que você faça um serviço para evitar poluir o escopo da raiz. Você cria um serviço e o disponibiliza no seu controlador da seguinte forma:

            

Se isso não for uma opção para você, você pode adicioná-lo ao escopo raiz assim:

            

Dessa forma, todos os seus modelos podem chamar globalFoo() sem ter que passá-lo para o modelo do controlador.

Você também pode combiná-los, eu acho:

            

Embora a primeira abordagem seja defendida como abordagem “angular”, sinto que isso acrescenta overheads.

Considere se eu quiser usar esta function myservice.foo em 10 controladores diferentes. Eu terei que especificar essa dependência de ‘myService’ e, em seguida, a propriedade de escopo $ scope.callFoo em todos os dez deles. Isto é simplesmente uma repetição e de alguma forma viola o princípio DRY.

Considerando que, se eu usar a abordagem $ rootScope, eu especifico esta function global gobalFoo apenas uma vez e ela estará disponível em todos os meus futuros controladores, não importa quantos.

AngularJs tem ” Serviços ” e ” Fábricas ” apenas para problemas como o seu. Eles estão acostumados a ter algo global entre Controladores, Diretivas, Outros Serviços ou quaisquer outros componentes angularjs. Você pode definir funções, armazenar dados, calcular funções ou qualquer coisa que você quer dentro dos Serviços e usá-los em Componentes AngularJs como Global .como

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

se você precisar de mais

Encontre mais sobre porque precisamos de serviços e fábricas AngularJs

Eu sou um pouco mais novo no Angular, mas o que eu achei útil para fazer (e bem simples) é que eu fiz um script global que carreguei na minha página antes do script local com variables ​​globais que eu preciso acessar em todas as páginas de qualquer maneira. Nesse script, criei um object chamado “globalFunctions” e adicionei as funções que preciso acessar globalmente como propriedades. eg globalFunctions.foo = myFunc(); . Então, em cada script local, eu escrevi $scope.globalFunctions = globalFunctions; e eu instantaneamente tenho access a qualquer function que eu adicionei ao object globalFunctions no script global.

Este é um pouco de uma solução alternativa e eu não tenho certeza se isso ajuda, mas definitivamente me ajudou como eu tinha muitas funções e foi uma dor adicionando todos eles para cada página.