在restangular控制器中的addResponseInterceptor

时间:2015-11-12 00:34:50

标签: angularjs restangular

我对AngularJS很新,我试图使用restangular来调用我的服务器Rest API,它返回给我这个json:

{"Users":[{"AN01_ID":1,"AN01_NAME":"cust1","AN01_REF":1,"AN01_ALT":4},{"AN01_ID":2,"AN01_NAME":"cust2","AN01_REF":2,"AN01_ALT":3},{"AN01_ID":3,"AN01_NAME":"cust3","AN01_REF":3,"AN01_ALT":2},{"AN01_ID":4,"AN01_NAME":"cust4","AN01_REF":4,"AN01_ALT":1}],"ResponseStatus":{}}

从我在文档中读到的内容我需要在addResponseInterceptor中设置config以从我的json响应中提取我需要的数组,如下所示:

var app = angular.module('testApp', ['restangular']);

app.config(function(RestangularProvider) {
  RestangularProvider.setBaseUrl('http://myserver/api/');

  RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
    return data.Users;
  });
});

app.controller('usersController', function($scope, Restangular) {
    $scope.users = Restangular.all('users.json').getList().$object;
});

我的问题是:如果我需要为每个控制器指定不同的阵列名称,如何在控制器中定义addResponseInterceptor(或者我如何在控制器中提取特定阵列?)

1 个答案:

答案 0 :(得分:1)

这不是使用responseInterceptor的常用方法,你应该在拦截器中做一些通用的事情,比如你想要放置每个响应的某个属性。

为了提取特定的响应,你应该总是使用promise回调并解决你的块中的响应,所以这应该是你的代码。

var app = angular.module('testApp', ['restangular']);

app.config(function(RestangularProvider) {
  RestangularProvider.setBaseUrl('http://myserver/api/');
  // remove this part of the code as you do not need it
});

app.controller('usersController', function($scope, Restangular) {
    Restangular.all('users.json').getList().then(function(response){
        $scope.users = response.Users;
    });
});