以下是使用$ 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;
});
}}
答案 0 :(得分:1)