AngularJS
provider
Ricerca…
Sintassi
- costante (nome, valore);
- valore (nome, valore);
- factory (nome, $ getFn);
- servizio (nome, costruttore);
- fornitore (nome, fornitore);
Osservazioni
I provider sono oggetti singoli che possono essere iniettati, ad esempio, in altri servizi, controller e direttive. Tutti i fornitori sono registrati utilizzando diverse "ricette", in cui il Provider
è il più flessibile. Tutte le ricette possibili sono:
- Costante
- Valore
- Fabbrica
- Servizio
- Provider
I servizi, le fabbriche e i provider sono tutti inizializzati in modo pigro, il componente viene inizializzato solo se l'applicazione dipende da esso.
I decoratori sono strettamente legati ai fornitori. I decoratori sono utilizzati per intercettare il servizio o la creazione della fabbrica al fine di cambiarne il comportamento o sostituirlo (parti di esso).
Costante
Constant
è disponibile sia in fase di configurazione che di esecuzione.
angular.module('app',[])
.constant('endpoint', 'http://some.rest.endpoint') // define
.config(function(endpoint) {
// do something with endpoint
// available in both config- and run phases
})
.controller('MainCtrl', function(endpoint) { // inject
var vm = this;
vm.endpoint = endpoint; // usage
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{ ::vm.endpoint }}</div>
</body>
endpoint = http: //some.rest.endpoint
Valore
Value
è disponibile sia nella configurazione che nelle fasi di esecuzione.
angular.module('app',[])
.value('endpoint', 'http://some.rest.endpoint') // define
.run(function(endpoint) {
// do something with endpoint
// only available in run phase
})
.controller('MainCtrl', function(endpoint) { // inject
var vm = this;
vm.endpoint = endpoint; // usage
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{ ::vm.endpoint }}</div>
</body>
endpoint = http: //some.rest.endpoint
Fabbrica
Factory
è disponibile in fase di esecuzione.
La ricetta Factory costruisce un nuovo servizio utilizzando una funzione con zero o più argomenti (dipendono da altri servizi). Il valore di ritorno di questa funzione è l'istanza di servizio creata da questa ricetta.
Factory può creare un servizio di qualsiasi tipo, sia esso un primitivo, oggetto letterale, funzione, o anche un'istanza di un tipo personalizzato.
angular.module('app',[])
.factory('endpointFactory', function() {
return {
get: function() {
return 'http://some.rest.endpoint';
}
};
})
.controller('MainCtrl', function(endpointFactory) {
var vm = this;
vm.endpoint = endpointFactory.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
endpoint = http: //some.rest.endpoint
Servizio
Service
è disponibile in fase di esecuzione.
La ricetta del servizio produce un servizio proprio come le ricette Valore o Fabbrica, ma lo fa invocando un costruttore con il nuovo operatore . Il costruttore può accettare zero o più argomenti, che rappresentano le dipendenze richieste dall'istanza di questo tipo.
angular.module('app',[])
.service('endpointService', function() {
this.get = function() {
return 'http://some.rest.endpoint';
};
})
.controller('MainCtrl', function(endpointService) {
var vm = this;
vm.endpoint = endpointService.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
endpoint = http: //some.rest.endpoint
Provider
Provider
è disponibile sia in fase di configurazione che di esecuzione.
La ricetta del provider è sintatticamente definita come un tipo personalizzato che implementa un metodo
$get
.È necessario utilizzare la ricetta Provider solo quando si desidera esporre un'API per la configurazione a livello di applicazione che deve essere eseguita prima dell'avvio dell'applicazione. Questo di solito è interessante solo per i servizi riutilizzabili il cui comportamento potrebbe dover variare leggermente tra le applicazioni.
angular.module('app',[])
.provider('endpointProvider', function() {
var uri = 'n/a';
this.set = function(value) {
uri = value;
};
this.$get = function() {
return {
get: function() {
return uri;
}
};
};
})
.config(function(endpointProviderProvider) {
endpointProviderProvider.set('http://some.rest.endpoint');
})
.controller('MainCtrl', function(endpointProvider) {
var vm = this;
vm.endpoint = endpointProvider.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
endpoint = http: //some.rest.endpoint
Senza risultati di fase di config
sarebbe
endpoint = n / a