如何在AngularJS中为$ resource方法添加回调

Edw*_*ard 30 resources callback angularjs

我们需要在更新/创建一些数据后向用户显示错误/成功消息,这是一种常见的情况,我们如何在AngularJS中实现它?
我想添加回调但无法找到解决方案.使用$ http.post().success().error()有效,但我想知道我是否可以使用更高的杠杆API $资源.
或者,我们应该写指令或使用$ watch()?
感谢您的帮助.

jai*_*ime 51

Resource类的操作可以像低级$ http服务一样传递成功和错误回调

来自文档

  • HTTP GET"类"操作:Resource.action([parameters],[success],[error])
  • 非GET"类"操作:Resource.action([parameters],postData,[success],[error])

非获取操作以前缀为前缀$.

所以你可以做到这一点

User.get({userId:123}, function(u, getResponseHeaders){
  // this is get's success callback
  u.abc = true;
  u.$save(function(u, putResponseHeaders) {
    // This is $save's success callback, invoke notification from here
  });
});
Run Code Online (Sandbox Code Playgroud)

编辑:这是前一个plunker另一个例子.get请求将失败,因为它请求不存在的json文件.将运行错误回调.

someResource.get(function(data){
    console.log('success, got data: ', data);       
}, function(err){
    alert('request failed');
});
Run Code Online (Sandbox Code Playgroud)


M's*_*ph' 5

使用最新的AngularJS版本,您可以查看$interceptors哪些版本是其中的一部分$httpProvider.

然后,您可以在发送之前或响应之后拦截所有请求.

angular.module('app').config(function($httpProvider){

  $httpProvider.interceptors.push(function($q) {
    return {
      'request': function(config) {
        console.log('I will send a request to the server');
        return config; 
      },

      'response': function(response) {
        // called if HTTP CODE = 2xx 
        console.log('I got a sucessfull response from server'); 
        return response;
      }

      'responseError': function(rejection) {
        // called if HTTP CODE != 2xx
        console.log('I got an error from server');
        return $q.reject(rejection);
      }
    };
  });

});
Run Code Online (Sandbox Code Playgroud)

请注意,您必须返回configresponse让它工作.

在这种情况下rejection,您需要返回延迟拒绝,以便$http.get().error()在拦截后仍然工作.