2015-07-27 4 views
0

Я новый, чтобы угловой, и мне интересно, что лучше всего подходит для функций .success и .error, которые могут быть размещены внутри контроллера или на заводе? Пример:Угловая фабрика .success и .error функции

я использую это:

(function(){ 
    'use strict'; 

    angular 
    .factory('apiService', function($http){ 
     var apiService = { 
      getProfileData: getProfileData 
     } 

     return apiService; 

     function getProfileData(url){ 
      return $http.jsonp(url); 
     } 

    }); 
})(); 

или это:

(function(){ 
    'use strict'; 

    angular 
    .factory('apiService', function($http){ 
     var apiService = { 
      getProfileData: getProfileData 
     } 

     return apiService; 

     function getProfileData(url){ 
      return $http.jsonp(url) 
       .success(function(data){ 
        return data; 
       }) 
       .error(function(err){ 
        return err; 
       }); 
     } 

    }); 
})(); 

и как я должен ее обработки в контроллере?

ответ

3

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

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

0

Я бы посоветовал иметь его на службе/фабрике. Контролеру не нужно знать о реализации коммуникации (которую вы, возможно, захотите высмеять в будущем).

Разделение проблем. :)

0

Оба подхода верны, но зависят от того, как вы хотели бы открыть API.

первый подход

Это довольно просто. Вы должны пойти на этот подход, только если вы даете весь контроль над всем аспектом имеющегося в $http ответа, как данные, заголовок, статус & конфигурации

второй подход

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

Я предлагаю вам перейти на 2-й подход, чтобы вы могли получить больше доступа к данным, прежде чем возвращать его методу вызова.

+0

@ пользователь2950720 Вы посмотрели на мой ответ? –

0

Вы должны выбрать 2-й вариант, но .success вернуть обещание, но offeres чуть более convienient синтаксис, где, как .then полна мощность обещание API, но немного более многословным, поэтому несмотря на использование .success я предлагаю вам предпочесть .then.

Смежные вопросы