在我的代码中,我有:
var EntityResource = $resource('/api/:entityType', {}, {
postEntity: { url: '/api/:entityType/', method: 'POST' },
getEntity: { url: '/api/:entityType/:entityId', method: 'GET' },
putEntity: { url: '/api/:entityType/:entityId', method: 'PUT' },
deleteEntity: { url: '/api/:entityType/:entityId', method: "DELETE" },
getEntities: { url: '/api/:entityType/:action/:id', method: 'GET', isArray: true },
});
然后我使用以下内容获取数据:
getProjects: function (
entityType,
deptId) {
var deferred = $q.defer();
EntityResource.getEntities({
action: "GetProjects",
entityType: entityType,
deptId: deptId
},
function (resp) {
deferred.resolve(resp);
}
);
return deferred.promise;
},
以及以下调用getProjects:
entityService.getProjects(
'Project',
$scope.option.selectedDept)
.then(function (result) {
$scope.grid.data = result;
}, function (result) {
$scope.grid.data = null;
});
我认为不需要中间函数getProjects,我想直接使用$ resource。
有人可以就如何做到这一点给我一些建议吗?我查看了针对$ resource的AngularJS文档,对我来说不是很清楚。
答案 0 :(得分:0)
$ resource调用返回空数组,然后在收到响应时填充它们。如documentation
中所述重要的是要意识到调用$ resource对象方法 立即返回一个空引用(对象或数组取决于 IsArray的)。一旦数据从服务器返回现有数据 引用填充了实际数据。
资源上已经定义了默认的5种方法,get,save,query,remove,delete
。您可以直接调用这些而不是像postEntity
那样定义自己的,但是网址模板保持不变。
所以一旦你定义了像这样的资源
var entityResource = $resource('/api/:entityType');
你可以拨打电话
var entity=entityResource.get({entityType:1},function(data) {
//The entity would be filled now
});
请参阅文档
中的User
示例
如果您想要返回promise,那么您必须将调用包装到您的服务调用中,就像您为getProjects所做的那样。
更新:根据您的评论,定义可能是
var entityResource = $resource('/api/:entityType/:action/:id')
现在,如果你这样做
entityResource.get({},function(){}) // The query is to /api
entityResource.get({entityType:'et'},function(){}) // The query is to /api/et
entityResource.get({entityType:'et',:action:'a'},function(){}) // The query is to /api/et/a
entityResource.get({entityType:'et',:action:'a',id:1},function(){}) // The query is to /api/et/a/1
希望它有所帮助。
$ resource确实暴露了$ promise,但它是在返回值和后续调用上。