将 $http.get 转换为 Restangular

Converting $http.get to Restangular

本文关键字:Restangular 转换 get http      更新时间:2023-09-26

好吧,对于一个实习项目,我正在尝试为 REST API 创建一个简单的客户端。当前客户端正在使用常规的angularJS,但我需要使用Restangular

我一直在四处寻找,尝试很多东西,但没有什么能帮助我做我想做的事,或者理解需要发生的事情。

这是需要转换为 Restangular 的代码片段

$http.get('/rest/programarticle/', {
  'format': 'json'
}).success(function(data, status, headers, config) {
  $scope.articles = angular.articles = data.results;
});

这将选取包含一些元数据的 JSON 数据以及一个数组(结果):

{
    "count": 3,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 100,
            "catalog": 7,
            "catalog_alias": "placeHolder",
            "program": 7,
            "name": "placeHolder"
        },
        {
            "id": 92,
            "catalog": 6,
            "catalog_alias": "placeHolder",
            "program": 6,
            "name": "placeHolder"
        },
        {
            "id": 84,
            "catalog": 5,
            "catalog_alias": "string",
            "program": 5,
            "name": "placeHolder"
        }
    ]
}

我已正确配置了我的baseUrl,并尝试了以下方法:

var testArticles = Restangular.all('programarticle').getList();
console.log(testArticles);

使用以下响应拦截器:

RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
    var extractedData;
    if (operation === "getList") {
        extractedData = data.results;
        extractedData.count = data.count;
        extractedData.next = data.next;
        extractedData.previous = data.previous;
    } else {
        extractedData = data.data;
    }
    return extractedData;
});

但这仍然会导致我无法在控制台中使用的内容:

Promise {$$state: Object, restangularCollection: true, $object: Array[0]}

打开时显示以下内容:

$$state: Object
$object: Array[7]
call: wrapper()
get: wrapper()
push: wrapper()
restangularCollection: true
__proto__: Promise

它确实显示了一个数组($object),但我无法使用

console.log(testArticles.$object);

我应该使用 .get() 而不是 getList()吗?如果是这样,我如何正确使用它?

感谢您抽出宝贵时间,请建议,我仍然是初学者。

restangular 返回的 get/getList 函数实际上是 Promises,而不是自己检索的 JSON 对象。承诺是一种使用更易于管理的接口抽象异步调用的方法。它们代表着预期的未来结果。

你需要知道的是,要获得 Promise 的实际结果,你必须使用 then 函数添加一个回调,如下所示:

Restangular.all('programarticle').getList().then(function (articles) {
    $scope.articles = articles;
});

在此处阅读有关承诺的更多信息。