如何在 angular 中使用资源工厂调用多个 GET 请求?

How to call multiple GET requests using a resource factory in angular?

这是我使用 $resource

的工厂方法代码
    (function () {
    "use strict";
    angular.module("common.services")
    .factory("lookupResource", ["$resource", "appsettings", lookupResource])
    function lookupResource($resource, appsettings) {
        return {
            lookupUserRoles: $resource(appsettings.serverpath + "api/UserRoles", null,
                {
                    'userRoles': { method: 'get' }
                }),
            lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
                {
                    'staffTypes': { method: 'get' }
            })
        }
    }

})();

我正在尝试使用以下代码调用 lookupStaffTypes,但它没有提供任何数据或错误。我在这里错过了什么?

   lookupResource.lookupStaffTypes.staffTypes( function (data) {
                var test = data;
            },
                function (response) {
                    vm.message = response.statusText + "\r\n"
                    if (response.data.exceptionMessage)
                    { vm.message += response.data.exceptionMessage }
                    //validation errors
                    if (response.data.error) {
                        vm.message += response.data.error;
                    }
                });

我在哪里可以这样调用它并为我提供数据:

 var staffTypes = $http.get(appsettings.serverpath + "api/StaffTypes").then(function (dataResponse) {
            var qwe = dataResponse;
            for (var i = 0; i < dataResponse.data.length; i++) {
                $scope.staffTypeList.push(dataResponse.data[i]);
            }

        }, function (response) {
            vm.message = response.statusText + "\r\n"
            if (response.data.exceptionMessage)
            { vm.message += response.data.exceptionMessage }
            //validation errors
            if (response.data.error) {
                vm.message += response.data.error;
            }
        });

我是 angular 的新手,非常感谢任何帮助!

我建议避免 ngResource module and just using the $http service directly. If a server implements a RESTful API, I recommend using Restangular.

也就是说,对于 ngResource:

如果服务器return是一个数组,用isArray: true定义动作方法很重要:

app.factory("lookupResource", ["$resource", "appsettings", lookupResource])
function lookupResource($resource, appsettings) {
    return {
        lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
            {
                'staffTypes': { method: 'get',
                                isArray: true }
        })
    }
}

调用它:

$scope.staffTypeList = lookupResource.lookupStaffTypes.staffTypes();

//OR

$scope.staffTypeList = lookupResource.lookupStaffTypes.query();

重要的是要认识到立即调用 $resource 对象方法 return 是一个空引用(对象或数组取决于 isArray)。从服务器 return 编辑数据后,现有引用将填充实际数据。

如果服务需要一个对象但接收到一个数组,反之亦然,它将生成一个 $resource:badcfg error。如果服务 return 是布尔值或字符串,则操作方法将安静地 return 什么都没有。

使用接收到的对象(或数组)的$promise属性来链接顺序操作:

$scope.staffTypeList.$promise.then(function(staffTypeList) {
    console.log(staffTypeList);
    //Do more stuff
});