我有这些"方法"在我的角度服务中,使用restangular来获取远程数据,其中respose是这样的:
{
"1105":{"title":"","field_nazione":{"und":[{"value":null,"format":null,"safe_value":""}]},"field_redazionale":{"und":[{"value":null}]}},
"1110":{"title":"","field_nazione":{"und":[{"value":null,"format":null,"safe_value":""}]},"field_redazionale":{"und":[{"value":null}]}}
};
function restfulService(ipCookie,Restangular) {
return {
//Setta la directory di partenza del service rest. In questo modo non devo sempre definirlo
restfulBase : function() {
return Restangular.oneUrl('rest','http://MYREMOTEHOST/rest');
},
getAllCity : function () {
return this.restfulBase().get('cities', {'all':1}, {}, {'X-CSRF-Token': tokenVar});
},
....
};
为什么当我调用getAllCity()时,url是:
http://MYDOMAIN/rest?0=c&1=i&2=t&3=i&4=e&5=s
如果我使用它:
Restangular.oneUrl('rest','http://MYDOMAIN/rest/cities').get({all : 1});
我没有问题。
我尝试更改我的应用程序,在.config()方法中设置Restangular.setBaseUrl(),然后更改我的服务以使用Restangular.all(' cities')。get()但我有一个关于"字符串"。
的错误如果我使用getAll(),我有一个关于" getLists()想要数组而不是对象"的错误。
那么:使用Restangular的正确方法是什么?我已经阅读了在线文档和教程,但我还不了解如何以正确的方式检索元素。并且"发布"。
感谢并抱歉这个愚蠢的问题。
答案 0 :(得分:0)
我认为问题在于您将基础设置为“一种”资源类型。 “one”方法不是用于设置基本URL。我设置基本网址的方式是这样的:
angular.module('app')
.config(['RestangularProvider', function (RestangularProvider) {
// Set the base URL
RestangularProvider.setBaseUrl('http://MYREMOTEHOST/rest');
}]);
然后我访问每个资源,具体取决于其类型为“one”或“all”,如下所示:
function restfulService(ipCookie,Restangular) {
return {
getAllCity : function () {
return Restangular.all('cities').getList();
},
....
};
您还可以在配置阶段或运行时的每个请求中设置默认参数。 使用“all”时,“getLists()想要数组而不是对象”错误是因为它只接受数组作为响应,因此您需要先拦截数据并在之前解析数据阵列。在你的情况下,你得到一个对象,所以你可以像这样解析它:
// this happens at runtime, either in your implementation code or in a more global config file, like:
Restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
// If the what is set, than just grab it and return it
if (data.hasOwnProperty(what)) {
return data[what];
} else {
// Otherwise make it an array
var arr = [];
for (var key in data) {
arr.push(data[key]);
}
return arr;
});
希望这有帮助。