restangular 控制器中的 addResponseInterceptor

addResponseInterceptor in restangular controller

我是 AngularJS 的新手,我正在尝试使用 restangular 来调用我的服务器 Rest API 那 returns 我这个 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":{}}

根据我在文档中阅读的内容,我需要在 config 中设置 addResponseInterceptor 以从我的 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(或者:我如何在我的控制器中提取特定数组)?

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

为了提取特定的响应,您应该始终在您的 then 块中使用 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;
    });
});