3

您能否大致解释一下这段代码的作用:

App.config(['$httpProvider', function ($httpProvider) {
  $httpProvider.responseInterceptors.push('HttpSpinnerInterceptor');
  $httpProvider.defaults.transformRequest.push(function (data, headersGetter) {
    angular.element('.brand img').attr("src","<%= asset_path('brand/brand.gif') %>");
    return data;
  });
}]);

App.factory('HttpSpinnerInterceptor', function ($q, $window) {
  return function (promise) {
    return promise.then(function (response) {
      angular.element('.brand img').attr("src","<%= asset_path('brand/brand.png') %>");
      return response;
    }, function (response) {
      angular.element('.brand img').attr("src","<%= asset_path('brand/brand.png') %>");
      return $q.reject(response);
    });
  };
});

除了一些猜测它拦截了一些响应并注入了图像的 src 属性外,我完全不了解。

我不明白如何以及何时调用 HttpSpinnerInterceptor 以及“promise”参数是什么。

4

1 回答 1

5
  1. HttpSpinnerInterceptor 在 using service 发出的每个请求$http完成后(成功与否)被调用,但在 promise 被解析给调用者之前(因此您可以推迟结果)。实际上不需要转换请求,因为它与 HttpSpinnerInterceptor (或不需要 HttpSpinnerInterceptor ......)几乎相同,因为它不转换任何东西。

  2. promise参数是一个$q承诺,如果您需要在请求结果时执行一些异步操作,可以使用它,因为您可以稍后重新处理它,因此调用者稍后会得到结果。实际上,在您的代码中,您直接解决了这个承诺(或拒绝它),改变了图像的 src 属性。

以下是一些文档链接:

  1. 使用$http服务:http ://docs.angularjs.org/api/ng.$http - 仔细查看“响应拦截器”和“转换请求和响应
  2. AngularJS 中的承诺:http: //docs.angularjs.org/api/ng.$q
于 2013-01-31T15:35:13.630 回答