2017-06-21 39 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