Se eu tiver uma função utilitária foo
que queira chamar de qualquer lugar dentro da minha ng-app
declaração. Existe alguma maneira de torná-lo acessível globalmente na configuração do meu módulo ou preciso adicioná-lo ao escopo em todos os controladores?
191
module.value('myFunc', function(a){return a;});
e injetar pelo nome em seus controladores. (Se alguém quiser evitar fazer um serviço de)Respostas:
Você basicamente tem duas opções, defini-lo como um serviço ou colocá-lo no seu escopo raiz. Sugiro que você faça um serviço para evitar poluir o escopo raiz. Você cria um serviço e o disponibiliza em seu controlador da seguinte maneira:
Se isso não é 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 passar para o modelo a partir do controlador.fonte
foo()
funções? Fazer um$scope.callFoo()
invólucro para cada um deles é muito trabalhoso. Como posso "anexar" todas as funções de uma biblioteca ao escopo para que ela possa ser usada no modelo? Eu tenho uma grande biblioteca de conversão de unidades que quero que esteja disponível no meu modelo.$scope.callFoo = myService.foo;
de criar um novo invólucro em cada local que você deseja usá-lo.Você também pode combiná-los, eu acho:
fonte
$rootScope
?Embora a primeira abordagem seja defendida como a abordagem "do tipo angular", sinto que isso acrescenta custos indiretos.
Considere se eu quero usar esta função myservice.foo em 10 controladores diferentes. Terei que especificar essa dependência 'myService' e, em seguida, a propriedade $ scope.callFoo scope em todas as dez. Isso é simplesmente uma repetição e de alguma forma viola o princípio DRY.
Considerando que, se eu usar a abordagem $ rootScope, especificarei essa função global gobalFoo apenas uma vez e estará disponível em todos os meus controladores futuros, não importando quantos.
fonte
O AngularJs possui " Serviços " e " Fábricas " apenas para problemas como o seu. Estes costumam ter algo global entre Controladores, Diretivas, Outros Serviços ou qualquer outro componente do angularjs. Você pode definir funções, armazenar dados, fazer funções de cálculo ou o que quer que seja quiser dentro dos Serviços e usá-los no AngularJs Components como Global .like
se você precisar de mais
Saiba mais sobre por que precisamos dos serviços e fábricas da AngularJs
fonte
Sou um pouco mais novo no Angular, mas o que achei útil fazer (e bastante simples) é que criei um script global que carrego na minha página antes do script local com variáveis globais que eu preciso acessar em todas as páginas de qualquer maneira. Nesse script, criei um objeto chamado "globalFunctions" e adicionei as funções que preciso acessar globalmente como propriedades. por exemplo
globalFunctions.foo = myFunc();
. Então, em cada script local, escrevi$scope.globalFunctions = globalFunctions;
e instantaneamente tenho acesso a qualquer função que adicionei ao objeto globalFunctions no script global.Isso é um pouco de solução alternativa e não tenho certeza de que o ajude, mas definitivamente me ajudou, pois eu tinha muitas funções e foi difícil adicionar todas elas a cada página.
fonte