我读了一些关于restangular的好东西,但我不知道如何从我当前使用$ resource的配置切换。
这是我使用$ resource的实际设置:
在service.js中:
.factory('List', function($resource) {
return $resource('relative/url/to/json/:type/:id', { type:'@type', id:'@id' });
})
两个不同的控制器使用此服务:
•“细节”控制器
.controller('DetailCtrl', ['$scope', '$routeParams', 'List', function($scope, $routeParams, List) {
var p = {'type': $routeParams.type, "id": $routeParams.id };
List.get(p, function(detail, responseHeaders) { // success callback
$scope.detail = detail;
// do something with responseHeaders
});
}])
•“list”控制器:
.controller('ListCtrl', ['$scope', 'List', function($scope, List) {
var params = { sort: 'DESC', limit: 8 };
$scope.loadList = function (type, params) {
params.type = type;
List.query(params, function(list, responseHeaders) { // success callback
$scope.list = list;
// do something with responseHeaders
});
}
}])
我想用restangular替换所有$ resource资源。
配置完成后,Restangular以基本方式获取数据,如下所示:
•在“细节”控制器内
$scope.elm = Restangular.one($routeParams.type, $routeParams.id).get();
•“list”控制器内部
var params = { sort: 'DESC', limit: 8};
$scope.loadList = function (type, params) {
$scope.list = Restangular.all(type).getList(params);
}
这是有效的。但现在:
1。如何获得响应标题?
2。如何将数据发送到成功回调函数内的范围?
答案 0 :(得分:0)
好吧,我想对你来说为时已晚,但也许这可以帮助别人。
问题#1,我在restangular github找到了这个:
setFullRequestInterceptor
fullRequestInterceptor类似于requestInterceptor但是 更加强大。它允许您更改元素,请求参数 以及标题。
它是一个接收与requestInterceptor plus相同的函数 标题和查询参数(按此顺序)。
必须返回具有以下属性的对象:
标题:要发送的标题
params:要发送的请求参数
元素:要发送的元素
httpConfig:用
调用的httpConfig
你可以这样做(编辑:我认为在这个功能中你也可以设置范围数据,改变代码):
Restangular.setFullResponse(true);
Restangular.setResponseInterceptor(function (data, operation, what, url, response, deferred) {
var contentType = response.headers['Content-Type']; // this to get content-type
var status = response.headers['Status']; // here we obtain the http response status
// now we can mount our own js object to return all we need
// i.e.: the status, content-type and response data to be processed into another function
var myArray = [contentType, status, response.data];
// i think we can also set scope data
$scope.myData = response.data;
return myArray;
});