2017-06-21 84 views
0

下面是使用$资源如何使用角度资源工厂调用多个GET请求?

(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; 
      } 
     }); 

我新的角度和任何帮助,将不胜感激!

+0

你明白了什么,当你'的console.log(测试)'?另外,你是否在模块中注入了'ngResource'? – vishtree

+0

@ vishtree-测试是未定义的,我已经将ngResource注入到common.services模块。 –

回答

2

我建议避免使用ngResource module,直接使用$http service。如果服务器实现了RESTful API,我推荐使用Restangular

这就是说,对于ngResource:

如果服务器返回的数组,重要的是与isArray: true定义操作方法:

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

//OR 

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

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

与调用它意识到调用$resource对象方法立即返回一个空引用(对象或数组取决于isArray)。一旦从服务器返回数据,现有参考将填入实际数据。

如果服务期望一个对象但收到一个数组,反之亦然,它将生成一个$resource:badcfg error。如果服务返回一个布尔值或一个字符串,操作方法将静静地返回任何内容。

使用$promise属性格式接收的对象(或阵列)与链顺序操作:

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

但我不认为他期待从API中获得数组。当他用$ http取消请求时,他得到的是一个对象,而不是数组。 @ libin-m纠正我,如果我错了。 – vishtree

+0

'dataResponse.data'是一个数组。但'dataResponse'是一个对象,这意味着响应是一个对象。这是我的理解。如我错了请纠正我。 – vishtree

+0

'dataResponse.data'是一个数组。因此有必要设置'isArray:true'。 – georgeawg