角度.js代码具有$httpProvider和承诺.它有什么作用



你能解释一下这段代码是做什么的吗:

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"参数是什么。

  1. HttpSpinnerInterceptor 在使用服务$http发出的每个请求完成后(成功与否)之后,但在将承诺解析给调用方之前(因此您可以延迟结果)。实际上不需要转换请求,因为它与 HttpSpinnerInterceptor 基本相同(或者不需要 HttpSpinnerInterceptor...),因为它不会转换任何东西。

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

以下是一些文档链接:

  1. 使用$http服务:http://docs.angularjs.org/api/ng.$http - 仔细查看"响应拦截器"和"转换请求和响应"
  2. AngularJS中的承诺:http://docs.angularjs.org/api/ng.$q

相关内容

  • 没有找到相关文章

最新更新