$http和factory-这个模式是如何工作的

$http and factory - how does this pattern work?

本文关键字:何工作 工作 http factory- 模式      更新时间:2023-09-26

以下是使用$http将数据从工厂获取到控制器的推荐方法——根据https://github.com/johnpapa/angularjs-styleguide

我不知道$http上的两个成功回调是如何工作的(我评论了我认为这两个回调是什么)。1) 第一次回调的意义何在?2) vm.avenger指向哪里?它是对另一个对象的引用吗?3) 第二个回调中是否有"data"=第一个回调中的"response.data.results"?4) 我正在计算总共3个被链接的回调,对吗?

附言:我已经知道承诺,但想学习这个模式,特别是

工厂

 /* 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. 第一次回调的目的是在数据进入应用程序之前对其进行任何操作,并从http响应对象中实际提取有用的数据
  2. vm.avengers是在控制器的顶部声明的。它使用了"controller as"语法,并引用了控制器的"this"对象。您最终将使用vm.avenger来访问视图中的数据
  3. 正确
  4. HTTP呼叫->getAvengersComplete->getAvegers,因此更正3个回调