AngularJS重新启动并获取单个url
我的angular服务中有这些方法,它们使用Restanglar获取远程数据,响应如下:AngularJS重新启动并获取单个url,angularjs,rest,Angularjs,Rest,我的angular服务中有这些方法,它们使用Restanglar获取远程数据,响应如下: { "1105":{"title":"","field_nazione":{"und":[{"value":null,"format":null,"safe_value":""}]},"field_redazionale":{"und":[{"value":null}]}}, "1110":{"title":"","field_nazione":{"und":[{"value":null,"format":
{
"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,我会在GetList需要数组而不是对象时出错
那么:使用restanglar的正确方法是什么?我已经阅读了在线文档和教程,但我不知道如何以正确的方式检索元素。和张贴
感谢并为这个愚蠢的问题感到抱歉。我相信问题在于您将基础设置为一种资源类型。唯一的方法不是设置基本URL。我设置基本url的方式如下所示:
angular.module('app')
.config(['RestangularProvider', function (RestangularProvider) {
// Set the base URL
RestangularProvider.setBaseUrl('http://MYREMOTEHOST/rest');
}]);
// 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;
});
然后我访问每个资源,这取决于它的类型和一个或全部,如下所示:
function restfulService(ipCookie,Restangular) {
return {
getAllCity : function () {
return Restangular.all('cities').getList();
},
....
};
您还可以在配置阶段设置默认参数,或在运行时为每个请求设置默认参数。
使用all时出现的getLists想要数组而不是对象错误是因为它只接受数组作为响应,因此需要先截获数据,然后在数组中解析数据。在您的情况下,您将获得一个对象,因此您可以像这样解析它:
angular.module('app')
.config(['RestangularProvider', function (RestangularProvider) {
// Set the base URL
RestangularProvider.setBaseUrl('http://MYREMOTEHOST/rest');
}]);
// 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;
});
希望这有帮助