Использование Сервисов в angularjs
Я онлайн прочитал, что вы должны использовать Сервис для получения данных, а не просто помещать код в контроллер, чтобы сохранить Контроллеры тонкими.
Вот мой контроллер, который выбирает список сотрудников:
angular.module("app").controller("MyController", function ($scope, $http) {
$http.get("/api/getempl").then(function (response) {
if (response.status == 200) {
$scope.empData = response.data.data;
} else {
console.log('400');
}
});
});
Затем я попробовал подход _Service в надежде на улучшение производительности
angular.module("app").factory("testService", function ($http, $location) {
return {
getData: function () {
var promise = $http.get("/api/getempl").then(function (response) {
return response.data.data;
});
return promise;
}
};
});
Теперь, когда я внедрил Службу, как показано выше, и протестировал ее в firebug под вкладкой net, время загрузки страницы не улучшилось, а вместо этого увеличилось.
Что я делаю не так в коде или какую концепцию мне не хватает при использовании Сервисов в AngularJS?
angular.module("app").controller("MyController", function ($scope, $http, testService) {
testService.getData().then(function (response) {
$scope.empData = response;
});
});
2 ответа
Использование сервисов рекомендуется не для производительности, а для разделения проблем и чистоты кода. Сказав это, если ваш контроллер имеет только один вызов $ http, то нет смысла создавать службу только ради службы.
Относительно производительности нет никакой разницы. Подход Controller-Service предназначен для разделения обязанностей (поведение GUI в Controller, состояние и бизнес-логика в сервисах).
Это связано с тем, что службы в AngularJS являются глобальными синглетонами (внутри модуля). Контроллеры создаются каждый раз, когда они необходимы.
Подход Сервиса гарантирует, что ваши Контроллеры не слишком зависят от $ scope и от других Контроллеров, так как большая часть логики должна быть перенесена в ваши Сервисы. Таким образом, логика также может быть повторно использована в контроллерах.