2014-11-03 2 views
0

Ниже рекомендуемый способ получить данные в контроллер с завода, используя $ HTTP - по https://github.com/johnpapa/angularjs-styleguide

Что я не понимаю, как два успешных обратных вызовов на $ HTTP работы (я заметил, что я думаю два обратных вызова). 1) Какова точка первого обратного вызова? 2) Где указывает vm.avengers? Это ссылка на другой объект? 3) является «данными» во втором обратном вызове = «response.data.results» из первого? 4) Я подсчитал 3 общих обратных вызова, прикованных, это правильно?

P.S. я уже знаю об обещаниях, но хотите узнать эту модель специально

Завод

/* recommended */ 

// dataservice factory 
angular 
.module('app.core') 
.factory('dataservice', dataservice); 

dataservice.$inject = ['$http', 'logger']; 

function dataservice($http, logger) { 
return { 
    getAvengers: getAvengers 
}; 

function getAvengers() { 
    return $http.get('/api/maa') 
     .then(getAvengersComplete) 
     .catch(getAvengersFailed); 

    //Callback One 
    function getAvengersComplete(response) { 
     return response.data.results; 
    } 

    function getAvengersFailed(error) { 
     logger.error('XHR Failed for getAvengers.' + error.data); 
    } 
} 

}

Контроллер

function Avengers(dataservice, logger) { 
    var vm = this; 
    vm.avengers = []; 

    activate(); 

    function activate() { 
    return getAvengers().then(function() { //Callback 3 
     logger.info('Activated Avengers View'); 
    }); 
} 

function getAvengers() { 
    return dataservice.getAvengers() 
     .then(function(data) { //Callback 2 
      vm.avengers = data; 
      return vm.avengers; 
     }); 
}} 

ответ

1
  1. Смысл этого первого обратного вызова для делать какие-либо манипуляции с данными перед входом в приложение и фактически извлекать полезные данные из http r объект ответа.
  2. vm.avengers объявлен в верхней части вашего контроллера. Он использует синтаксис «контроллер как» и помещается в ссылку на «этот» объект контроллера. В конечном итоге вы используете vm.avengers для доступа к данным в представлении.
  3. Исправить.
  4. HTTP Call -> getAvengersComplete -> getAvengers, поэтому исправьте 3 обратных вызова.
+0

не уверен, почему это было приостановлено, кажется хорошим ответом на меня – Greg

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