javascript - $http 和工厂 - 这个模式是如何工作的?

标签 javascript angularjs

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

我不明白的是 $http 上的两个成功回调是如何工作的(我评论了我认为这两个回调是什么)。 1)第一个回调的意义是什么? 2)vm.avengers指向哪里?它是对另一个对象的引用吗? 3)第二个回调中的“data”=第一个回调中的“response.data.results”吗? 4) 我计算出总共 3 个链式回调,对吗?

附注我已经了解 Promise,但想专门学习这个模式

工厂

 /* 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);
    }
}

}

Controller

  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 的顶部声明。它使用“controller as”语法,并引用 Controller 的“this”对象。您最终将使用 vm.avengers 来访问 View 中的数据。
  3. 正确。
  4. HTTP 调用 -> getAvengersComplete -> getAvengers,因此纠正 3 个回调。

关于javascript - $http 和工厂 - 这个模式是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707210/

相关文章:

javascript - 使用 ng-repeat 从 angularjs 中的 http 响应数组中检索数据

unit-testing - 如何在AngularJS单元测试中将div添加到DOM中?

javascript - Jquery - 禁用文本框,但仍捕获该区域的点击事件

Javascript无法运行表单的幻灯片效果

javascript - .on() 方法子选择器不工作

javascript - 使用多个 jQuery-minicolors 样本更改多个 div 容器的背景颜色

angularjs - 在动态 ngSrc 请求中强制 HTTP 拦截器

html - ui-grid 删除排序菜单并将列标题对齐到最右侧

javascript - 尝试使用 $cachefactory 会抛出 [$injector :unpr] error

javascript - 以下 backbone.js 示例中的模型、 Controller 、 View 是什么?