===== Собственный сервис =====
В AngularJS вы можете сделать свой собственный сервис. Существует несколько способов создать собственный сервис.
- использовать метод module.factory()
- использовать module.service()
- использование метода provider
====использовать метод module.factory()====
самый простой способ создать сервис - использовать метод module.factory()
этот метод принимает 2 аргумента :
- имя сервиса;
- фабричная функция которая возвращает объект сервиса;
Объект сервиса будет использоватся во всем приложении когда он будет нужен.
так же важно заметить
что объект создается только один раз(singleton) и все пользователи этого сервиса работают с одним и тем же объектом
angular.module("additionalModule", [])
.directive("triButton", function () {
return {
scope: { counter: "=counter" },
link: function (scope, element, attrs) {
element.on("click", function (event) {
console.log("Button click: " + event.target.innerText);
scope.$apply(function () {
scope.counter++;;
});
});
}
}
});
angular.module("customServices", [])
.factory(" ", function () {
var messageCount = 0;
return {
log: function (msg) {
console.log("(LOG + " + messageCount++ + ") " + msg);
}
};
});
для того чтобы использовать сервис нужно лишь указать ео в зависимостях
Services and modules
Total clicks: {{data.totalClicks}}
{{ :angular:angularjs:сервисы:services1.png |}}
====использовать module.service()====
**module.service()** метод так же создает сервис только использует другой подход: AngularJS использует объект который возвращается функцией
как конструктор и за кулисами для его создания использует ключевое слово **new**
angular.module("additionalModule", [])
.directive("triButton", function () {
return {
scope: { counter: "=counter" },
link: function (scope, element, attrs) {
element.on("click", function (event) {
console.log("Button click: " + event.target.innerText);
scope.$apply(function () {
scope.counter++;;
});
});
}
}
});
angular.module("customServices", [])
.service("logService", function () {
var messageCount = 0;
this.log = function (msg) {
return console.log("(LOG + " + messageCount++ + ") " + msg);
};
});
файл с модулем от которого зависит модуль studyModule следует поключить до создания этого модуля иначе будет ошибка
Services and modules
Total clicks: {{data.totalClicks}}
{{ :angular:angularjs:сервисы:services2.png |}}
====использование метода provider====
аргументами метода provider являются
* название сервиса
* фабричная функция
Фабричная функция должна возвращать объект **provider**
который содержит метод **$get** который в свою очередь используется для возврата service объекта
когда сервис запрашивают AngularJS использует фабричный метод для получения provider объекта
а на нем в свою очередь вызывается метод **$get** для того чтобы получить //service объект//
преимуществом использования **provider** метода является то что вы можете добавить некую функцию в provider метод
которая далее может использоватся для конфигурации service объекта
angular.module("additionalModule", [])
.directive("triButton", function () {
return {
scope: { counter: "=counter" },
link: function (scope, element, attrs) {
element.on("click", function (event) {
console.log("Button click: " + event.target.innerText);
scope.$apply(function () {
scope.counter++;;
});
});
}
}
});
angular.module("customServices", [])
.provider("logService", function () {
var counter = true;
var debug = true;
return {
messageCounterEnabled: function (setting) {
if (angular.isDefined(setting)) {
counter = setting;
return this;
} else {
return counter;
}
},
debugEnabled: function (setting) {
if (angular.isDefined(setting)) {
debug = setting;
return this;
} else {
return debug;
}
},
$get: function () {
return {
messageCount: 0,
log: function (msg) {
if (debug) {
console.log("(LOG"
+ (counter ? " + " + this.messageCount++ + ") " : ") ")
+ msg);
}
}
};
}
}
});
ngularJS для provider объектов предоставляет возможность работать с Dependency Injection используя имя сервиса + слово Provider,
таким образом мы получаем provider объект, лучше всего использовать provider объект для настройки в config() методе так как
он будет выполнятся только после того как все модули будут загуржены, в данном случае мы настраиваем service объект
Services and modules