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

时间:2017-06-21 17:59:53

标签: angularjs angular-resource

这是我使用$ 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;
            }
        });

我是棱角分明的新人,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我建议避开$http service并直接使用RESTful API。如果服务器实现Restangular,我建议使用$resource:badcfg error

那说,对于ngResource:

如果服务器返回一个数组,则使用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对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。

如果服务需要一个对象但是接收一个数组,反之亦然,它将生成一个{{3}}。如果服务返回布尔值或字符串,则action方法将静默返回任何内容。

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

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