A questão principal - é possível? Tentei sem sorte ..
app.js principal
...
var app = angular.module('myApp', ['services']);
app.config(['customProvider', function (customProvider) {
}]);
...
próprio provedor
var services = angular.module('services', []);
services.provider('custom', function ($http) {
});
E eu tenho esse erro:
Uncaught Error: Unknown provider: $http from services
Alguma ideia?
Obrigado!
javascript
angularjs
angular-services
Kosmetika
fonte
fonte
app.config
parteRespostas:
O resultado final é:
Detalhes:
A estrutura angular tem um processo de inicialização de 2 fases:
FASE 1: Config
Durante a
config
fase, todos os provedores são inicializados e todas asconfig
seções são executadas. Asconfig
seções podem conter código que configura os objetos do provedor e, portanto, podem ser injetados com objetos do provedor. No entanto, uma vez que os provedores são as fábricas para os objetos de serviço e, neste estágio, os provedores não estão totalmente inicializados / configurados -> você não pode pedir ao provedor para criar um serviço para você neste estágio -> no estágio de configuração você não pode usar / injetar serviços . Quando esta fase é concluída, todos os provedores estão prontos (nenhuma configuração de provedor pode ser feita depois que a fase de configuração for concluída).FASE 2: Executar
Durante a
run
fase todas asrun
seções são executadas. Nesta fase, os provedores estão prontos e podem criar serviços -> durante arun
fase você pode usar / injetar serviços .Exemplos:
1. Injetar o
$http
serviço na função de inicialização do provedor NÃO funcionaráComo estamos tentando injetar o
$http
serviço em uma função que é executada durante aconfig
fase, obteremos um erro:O que esse erro está realmente dizendo é que o
$httpProvider
que é usado para criar o$http
serviço ainda não está pronto (pois ainda estamos naconfig
fase).2. A injeção do
$http
serviço na função de inicialização do serviço FUNCIONARÁ :Como agora estamos injetando o serviço na função de inicialização do serviço, que é executado durante a
run
fase, esse código funcionará.fonte
<script>var config = <% = mySettings.toJson() %>;</script>
). Isso pode ser feito usando um mecanismo de modelagem como Smarty para PHP, Jinja2 para Python, Nunchucks para NodeJS, etc.Isso pode lhe dar uma pequena vantagem:
Mas tenha cuidado, os retornos de chamada de sucesso / erro podem mantê-lo em uma condição de corrida entre o início do aplicativo e a resposta do servidor.
fonte
angular.injector(['mymodule'])
- mas não tenho certeza se você pode usar essa abordagem para o$http
serviço. Eu quero dizer que sim. Não tenho certeza se isso ajuda ou não: - /Esta é uma velha questão, parece que temos um caso de ovo de galinha acontecendo se quisermos contar com a capacidade central da biblioteca.
Em vez de resolver o problema de maneira fundamental, o que fiz foi contornar. Crie uma diretiva que envolva todo o corpo. Ex.
Agora
mc-body
precisa ser inicializado antes da renderização (uma vez), ex.Auth
é um serviço ou provedor, por exemplo,Parece-me que tenho controle sobre a ordem do bootstrap, é depois que o bootstrap regular resolve todas as configurações do provedor e depois tento inicializar a
mc-body
diretiva.E essa diretiva me parece estar à frente do roteamento, porque o roteamento também é injetado por meio de uma diretiva ex.
<ui-route />
. Mas posso estar errado nisso. Precisa de mais investigação.fonte
Em resposta à sua pergunta, "Alguma ideia?", Eu teria respondido com "sim". Mas espere, tem mais!
Eu sugiro apenas usar JQuery na configuração. Por exemplo:
fonte