默认情况下Angular不提供beforeSend并完成,但您可以使用拦截器实现它们.这是我的实现:
(function() {
var app = angular.module("app");
app.factory("interceptors",[function() {
return {
// if beforeSend is defined call it
'request': function(request) {
if (request.beforeSend)
request.beforeSend();
return request;
},// if complete is defined call it
'response': function(response) {
if (response.config.complete)
response.config.complete(response);
return response;
}
};
}]);
})();
那么你必须这样注册你的拦截器:
(function () {
var app = angular.module('app',['ngRoute']);
app.config(["$routeProvider","$httpProvider",function ($router,$httpProvider) {
// Register interceptors service
$httpProvider.interceptors.push('interceptors');
$router.when("/",{ templateUrl: "views/index.html" })
.otherwise({ redirectTo: "/" });
}]);
})();
这段代码可以这样使用:
var promise = $http({
method: 'POST',url: constants.server + '/emails/send',data: model,beforeSend: function() {
model.waiting = true;
},complete: function() {
model.waiting = false;
}
});