将$ http.get转换为Restangular

时间:2016-03-07 12:34:05

标签: javascript angularjs rest restangular

Alrighty,对于实习项目,我正在尝试为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);

使用以下ResponseInterceptor:

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()吗?如果是这样,我该如何正确使用它?

感谢您的时间,请提出建议,我还是初学者。

1 个答案:

答案 0 :(得分:1)

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

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

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

详细了解promises here