始终在$ http之前和之后执行操作

时间:2016-08-22 04:14:59

标签: angularjs angular-http

我希望我的应用程序始终在$http运行之前和之后执行一些操作,例如加载动画或删除所有邮件。

// Add loading animation + Remove all messages
$http({}).then(function(response) {
    // Remove loading animation + Add Success messages
}, function(response) {
    // Remove loading animation + Add Failure mesages
});

但如果我这样编码,我的代码就不干了。 我怎么能这样做而不重复自己?

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该能够使用拦截器实现它。阅读以下内容。

http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

您可以将自定义服务注入Interceptor组件。在请求函数中启用动画ON并在响应函数中将其关闭。您的主页也应该使用相同的服务来制作带有ng-if like

的动画DIV
<div ng-if="vm.myHttpStateService.isBusy">
..... animation here ...
</div>

答案 1 :(得分:-1)

使用承诺的.finally方法

//Add loading animation + Remove all messages
$http({}).finally(function() {
    //Remove loading animation 
}).then(function onSuccess(response){
    //Add Success messages
}).catch(function onReject(response){
    //Add Failure mesages
});

来自文档:

  

Promise API

     

<强>方法

     
      
  • finally(callback, notifyCallback) - 允许您观察承诺的履行或拒绝,但不要修改最终值。无论承诺被拒绝还是已解决,这对于释放资源或进行必要的清理都非常有用。有关详细信息,请参阅完整规范。
  •   

- AngularJS $q Service API Reference -- The Promise API