=====Сервисы===== Сервисы AngularJS представляют специальные объекты или функции, выполняющие некоторые общие для всего приложения задачи. В //AngularJS// имеюся ряд встроенных сервисов, такие как //$http, $q// и ряд других. Кроме того, имеется возможность создавать свои сервисы для выполнения специфических задач. ====Использование сервисов==== Чтобы создать сервис, нам надо использовать метод //factory//. Данный метод, как говорит название, представляет фабрику для создания сервиса. Причем сервис реализует паттерн синглтон, что значит, что для всего приложения будет создан только один экземпляр, и из любого места приложения будет идти обращение к этому единичному объекту. Например, используя сервисы, мы можем определить данные в некотором внешнем источнике и из него уже затем эти данные подгружать. Но для начала создадим свой сервис, который будет определять данные для контроллера.\\ Посмотрим на примере. Создадим новый проект. Сначала в него добавим папку js. А в этой папке определим файл app.js со следующим кодом:\\ var questApp = angular.module('questApp', []); То есть наше приложение будет называться questApp.\\ Также в папке js определим файл сервиса **dataService.js** со следующим содержанием:\\ questApp.factory('dataService', function(){ return{ question:{ text: 'Какой js-фреймворк лучше использовать?', author: 'Иван Иванов', date: '20/10/2013', answers: [{ text: 'AngularJS!', author: 'Вова Сидоров', date: '20/10/2013', rate:2 },{ text: 'AngularJS лучше всех', author: 'Олег Кузнецов', date: '21/10/2013', rate:3 }] } }; }) Здесь у модуля questApp мы вызвали метод //factory//, который в качестве первого параметра принимает название сервиса - 'dataService', а в качестве второго параметра служит функция, возвращающая объект question.\\ Теперь используем этот сервис. Для этого добавим в папку js каталог **controllers**/ А в этот каталог добави файл **QuestionController.js** со следующим контроллером: questApp.controller('QuestionController', function QuestionController($scope, dataService){ $scope.question=dataService.question; $scope.voteUp = function (answer){ answer.rate++; }; $scope.voteDown = function (answer){ answer.rate--; }; } ) Создаваемый сервис dataService будет передаваться в качестве параметра в контроллер. А из контроллера данные будут передаваться в представление.\\ Также в папке js определим каталог lib, в который добавим минимизированную главного файла //angular.min.js//. И в корне проекта располагается главная страница //index.html//:\\

{{question.text}}

{{question.author}}

{{question.date}}

Ответы

{{answer.rate}}
{{answer.text}}

{{answer.author}}

{{answer.date}}

В итоге весь проект будет выглядеть следующим образом:\\ {{:angular:angularjs:service1.png?200|}} ====Метод service==== Кроме метода factory для создания сервиса можно также использовать метод **Module.service**. Его применение будет аналогично. Создадим в папке **js** новый файл **questionService.js** со следующим содержанием:\\ var questionFn = function(){ return{ question:{ text: 'Какой js-фреймворк лучше использовать?', author: 'Иван Иванов', date: '20/10/2013', answers: [{ text: 'AngularJS!', author: 'Вова Сидоров', date: '20/10/2013', rate:2 },{ text: 'AngularJS лучше всех', author: 'Олег Кузнецов', date: '21/10/2013', rate:3 }] } } }; questApp.service('questionService', questionFn); И также установим зависимость в контроллере: questApp.controller('QuestionController', function QuestionController($scope, questionService){ $scope.question=questionService.question; $scope.voteUp = function (answer){ answer.rate++; }; $scope.voteDown = function (answer){ answer.rate--; }; } )