AngularJS
Провайдеры
Поиск…
Синтаксис
- константа (имя, значение);
- значение (имя, значение);
- завод (имя, $ getFn);
- сервис (имя, конструктор);
- поставщик (имя, поставщик);
замечания
Провайдеры представляют собой одноэлементные объекты, которые могут быть введены, например, в другие службы, контроллеры и директивы. Все поставщики зарегистрированы с использованием разных «рецептов», где Provider
является наиболее гибким. Все возможные рецепты:
- постоянная
- Значение
- завод
- обслуживание
- поставщик
Службы, фабрики и поставщики все ленивы инициализированы, компонент инициализируется, только если приложение зависит от него.
Декораторы тесно связаны с Провайдерами. Декораторы используются для перехвата обслуживания или создания фабрики, чтобы изменить его поведение или переопределить (его части).
постоянная
Constant
доступна как в конфигурации, так и в фазах запуска.
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
Значение
Value
доступно как на этапах конфигурации, так и на этапе запуска.
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
завод
Factory
доступна в фазе запуска.
Рецепт Factory создает новую службу, используя функцию с нулевым или большим аргументом (это зависимости от других сервисов). Возвращаемое значение этой функции является экземпляром службы, созданным этим рецептом.
Factory может создавать сервис любого типа, будь то примитивный, объектный литерал, функция или даже экземпляр пользовательского типа.
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
обслуживание
Service
доступна на этапе запуска.
Рецепт службы создает сервис, аналогичный рецептам Value или Factory, но он делает это, вызывая конструктор с новым оператором . Конструктор может принимать ноль или более аргументов, которые представляют зависимости, необходимые экземпляру этого типа.
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
доступен как в конфигурации, так и в фазах запуска.
Рецепт поставщика синтаксически определяется как настраиваемый тип, реализующий метод
$get
.Вы должны использовать рецепт поставщика только тогда, когда вы хотите открыть API для всей конфигурации приложения, которая должна быть выполнена до запуска приложения. Обычно это интересно только для многоразовых сервисов, поведение которых может немного меняться между приложениями.
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
Без config
фаза результат был бы
endpoint = n / a