...
Âncora what-is-provider what-is-provider
O que é um Provider?
Providers, assim como services e factories provem interfaces públicas e são passíveis de dependência. Diferentemente destes outros componentes, providers são expostos antes da inicialização da aplicação. Este atributo fornece aos providers um mecanismo de configuração, tornando-os uteis onde o comportamento de seus métodos públicos diferem conforme a configuração realiza em um bloco de inicialização do AngularJS.
São registrados através da Module API . Ao registrar um provider, dá-se um nome no qual será utilizado para injeção de dependências em quaisquers outros componentes do AngularJS. Abaixo temos um exemplo de como registrar um provider e como utiliza-lo através da injeção de dependências.
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
fooModule.provider('fooProvider', function() {
var barName = '';
this.foo = function() {
console.log('This is foo service printing ' + barName + ' :)');
};
this.$get = function () {
return this;
};
});
fooModule.controller('fooController', ['foo', function(fooProvider) {
fooProvider.foo();
}]); |
Todo provider deve possuir um método $get. Este será invocado pelo AngularJS para instanciar o provider e deixa-lo disponível para o bloco de configuração da aplicação. Internamente, services e factories são instancias de providers, onde o método $get é injetado automaticamente pelo framework para facilitar o desenvolvimento.
A injeção de dependências de providers mudam conforme a localidade que estão sendo injetados. Como podemos perceber no bloco de código acima, o provider de exemplo foi registrado com o nome fooProvider. Para injetarmos providers em controllers, retira-se o prefixo provider, restando apenas foo, como pode ser visto no fooController. Em blocos de configuração, mantem-se o prefixo como no bloco de exemplo abaixo.
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
fooModule.config(['fooProvider', function(fooProvider) {
fooProvider.barName = 'Bar'
}]); |
| Âncora | ||||
|---|---|---|---|---|
|
...