Можно ли вставить одну службу в другую в angularJS?
Можно ли вставить одну службу в другую в angularJS?
Ответы:
Да. следуйте обычному правилу инъекции в angularjs.
app.service('service1', function(){});
//Inject service1 into service2
app.service('service2',function(service1){});
Спасибо @simon. Лучше использовать внедрение массива, чтобы избежать проблемы с минимизацией.
app.service('service2',['service1', function(service1) {}]);
ngmin
или связанную задачу ворчания.
Да. Вот так (это провайдер, но применимо то же самое)
module.provider('SomeService', function () {
this.$get = ['$q','$db','$rootScope', '$timeout',
function($q,$db,$rootScope, $timeout) {
return reval;
}
});
В этом примере $db
это служба, объявленная где-то в приложении и внедренная в $get
функцию поставщика .
Чтобы избежать путаницы, я думаю, также стоит упомянуть, что если вы используете какие-либо другие службы (например, $ http, $ cookies, $ state) в своем childService, вам также необходимо явно объявить их.
например
function() {
var childService = function($http, $cookies, parentService) {
// Methods inherited
this.method1Inherited = parentService.method1();
this.method2Inherited = parentService.method2();
// You can always add more functionality to your child service
angular.module("app").service("childService", ["$http", "$cookies", "parentService", childService]);
}());
Вы можете либо объявить службы, которые вы используете, внутри своего дочернего элемента в массиве, и затем они будут автоматически вводиться, либо вводить их отдельно с помощью аннотации $ inject:
childService.$inject = ["$http", "$cookies", "parentService"];
angular.module("app").service("childService ", childService );
['service1', function(service1) {}]