有人能给我一个关于如何直接调用$ resource的例子吗?

时间:2013-09-03 05:36:51

标签: angularjs

在我的代码中,我有:

    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文档,对我来说不是很清楚。

1 个答案:

答案 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,但它是在返回值和后续调用上。