===== Собственный сервис ===== В 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
Total clicks: {{data.totalClicks}}
{{ :angular:angularjs:сервисы:services3.png |}}