Использование Сервисов в 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 и от других Контроллеров, так как большая часть логики должна быть перенесена в ваши Сервисы. Таким образом, логика также может быть повторно использована в контроллерах.

Другие вопросы по тегам