В чем преимущество создания новых сервисов в AngularJS?

0

При использовании AngularJS, почему было бы полезно сделать новую услугу, а не просто придерживаться $ http?

Зачем мне делать что-то вроде этого:

app.factory('forecast', ['$http', function($http) { 
    return $http.get('https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json')
        .success(function(data) { 
          return data; 
        }) 
        .error(function(err) { 
          return err; 
        }); 
}]);



app.controller('MainController', ['$scope', 'forecast', function($scope, forecast) {
    forecast.success(function(data) {
        $scope.fiveDay = data;
    });
}]);

Когда я мог просто придерживаться этого:

app.controller('MainController', ['$scope', '$http', function($scope, $http) {

    $http.get('https://s3.amazonaws.com/codecademy-content/courses/ltp4/forecast-api/forecast.json') 
        .success(function(data) { 
          $scope.fiveDay = data;
        }) 
        .error(function(err) { 
          return err; 
        }); 
}]);

Возможно, в этом случае это не имеет значения, но поскольку вы можете создавать новые сервисы в AngularJS, я предполагаю, что есть некоторые примеры, когда это выгодно. Заранее спасибо!

  • 2
    В этом случае это бесполезно (за исключением того, что URL-адрес является частным), но вы можете сделать гораздо больше с пользовательским сервисом: объединить несколько HTTP-вызовов в цепочку, обработать данные, возвращаемые обещанием, return success(function(data) { return processData(data); }) , хранить приватные переменные, выставлять открытые API и т. д.
  • 0
    Это также помогает в модульном тестировании компонентов в изоляции
Теги:

2 ответа

1
Лучший ответ

Что произойдет, если вам понадобится новый контроллер под названием WeatherController, который хочет получить доступ к данным о том же типе погоды, что и MainController. Без службы прогноза вам придется вырезать и вставлять и повторять $ http.get.

Это нормально, если он ограничивается двумя экземплярами, я думаю. Но что произойдет, если изменится URL-адрес прогноза-api? Теперь вы должны изменить его в двух местах.

Что делать, если вам нужен прогноз на 10 дней?

Пункт службы или любой модульный код состоит в том, чтобы помочь разделить дискретные куски кода на модули, которые могут быть повторно использованы везде, где они необходимы. И тогда вам нужно только беспокоиться об одном месте, чтобы исправить или изменить услугу.

Иногда бывает трудно понять, что когда вам нужно только в одном месте, но при написании кода вам нужно подумать о нескольких итерациях, чтобы попытаться предвидеть некоторые другие разумные варианты использования, чтобы облегчить жизнь в будущем.

1

В дополнение ко всем ответам, которые люди напишут здесь.

Основная идея состоит в том, чтобы не повторять ваш код и не делить ваш код на модули. Предположим, что у вас есть другой контроллер, который использует один и тот же ресурс $ http. Поэтому вам нужно скопировать и вставить код в новый контроллер вместо элегантного вызова службы и использовать его методы.

Как насчет обработки кода?

Вы работаете над большим проектом, и у вас много ссылок на $ http-запросы от тысяч контроллеров, но вы переместили свой сайт в новый домен или разработчик сервера изменил API для использования другого метода. Ну, вам нужно искать всех конроллеров, которые использовали этот URL. НО, если вы будете использовать услугу, вы можете изменить ее только в одном месте.

Есть больше преимуществ, но не для вашего примера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню