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()吗?如果是这样,我该如何正确使用它?
感谢您的时间,请提出建议,我还是初学者。
答案 0 :(得分:1)
来自restangular return的get
/ getList
函数实际上是Promises,而不是自己检索的JSON对象。 Promise是一种使用更易于管理的接口抽象异步调用的方法。他们代表着预期的未来结果。
您需要知道的是,要获得Promise的实际结果,您必须使用then
函数添加回调,如下所示:
Restangular.all('programarticle').getList().then(function (articles) {
$scope.articles = articles;
});
详细了解promises here。