=====Сервисы=====
Сервисы 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--;
};
}
)