你能解释一下这段代码是做什么的吗:
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"参数是什么。
-
HttpSpinnerInterceptor 在使用服务
$http
发出的每个请求完成后(成功与否)之后,但在将承诺解析给调用方之前(因此您可以延迟结果)。实际上不需要转换请求,因为它与 HttpSpinnerInterceptor 基本相同(或者不需要 HttpSpinnerInterceptor...),因为它不会转换任何东西。 -
promise
参数是一个$q
承诺,可用于如果您需要在请求结果时执行一些异步操作,因为您可以稍后重新定位它,因此调用者稍后会得到结果。实际上,在您的代码中,您可以直接解决此承诺(或拒绝它),更改图像的 src 属性。
以下是一些文档链接:
- 使用
$http
服务:http://docs.angularjs.org/api/ng.$http - 仔细查看"响应拦截器"和"转换请求和响应" - AngularJS中的承诺:http://docs.angularjs.org/api/ng.$q