将 $http.get 转换为 Restangular
Converting $http.get to Restangular
好的,对于一个实习项目,我正在尝试为 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() 吗?如果是这样,我该如何正确使用它?
谢谢你的宝贵时间,还请多多指教,我还是初学者
restangular return 中的 get
/getList
函数实际上是 Promises,而不是 JSON 对象自己检索的对象。 Promises 是一种使用更易于管理的接口来抽象异步调用的方法。它们代表预期的未来结果。
你需要知道的是,要获得 Promise 的实际结果,你必须使用 then
函数添加回调,如下所示:
Restangular.all('programarticle').getList().then(function (articles) {
$scope.articles = articles;
});
阅读更多关于承诺的信息here。
好的,对于一个实习项目,我正在尝试为 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() 吗?如果是这样,我该如何正确使用它?
谢谢你的宝贵时间,还请多多指教,我还是初学者
restangular return 中的 get
/getList
函数实际上是 Promises,而不是 JSON 对象自己检索的对象。 Promises 是一种使用更易于管理的接口来抽象异步调用的方法。它们代表预期的未来结果。
你需要知道的是,要获得 Promise 的实际结果,你必须使用 then
函数添加回调,如下所示:
Restangular.all('programarticle').getList().then(function (articles) {
$scope.articles = articles;
});
阅读更多关于承诺的信息here。