您能大致解释一下这段代码的作用吗:
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);
});
};
});
我完全不理解,除了一些猜测它拦截了一些响应并注入(inject)图像的 src 属性。
我不明白 HttpSpinnerInterceptor 是如何以及何时被调用的,以及“promise”参数是什么。
最佳答案
HttpSpinnerInterceptor 在使用
$http
服务发出的每个请求完成(成功与否)之后、但在向调用者解析 Promise 之前(因此您可以推迟结果)被调用。实际上不需要转换请求,因为它基本上与 HttpSpinnerInterceptor 相同(或者不需要 HttpSpinnerInterceptor...),因为它不转换任何内容。promise
参数是一个$q
promise ,如果您需要在获得请求结果时执行一些异步操作,则可以使用该 promise 稍后重新调整它,以便调用者稍后会得到结果。实际上,在您的代码中,您可以直接解决此 promise (或拒绝它),从而更改图像的 src 属性。
以下是一些文档链接:
- 使用
$http
服务:http://docs.angularjs.org/api/ng.$http - 仔细查看“响应拦截器”和“转换请求和响应” - AngularJS 中的 Promise:http://docs.angularjs.org/api/ng.$q
关于angularjs - 带有 $httpProvider 和 Promise 的 Angular.js 代码。它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629105/