2017-06-21 6 views
0

は、ここで私は、コードの下に使用してlookupStaffTypesを呼び出すようにしようとしていますが、それは何のデータやエラーを与えない リソースファクトリを使用して複数の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' } 
      }) 
     } 
    } 

})(); 

$リソース

を使用してファクトリメソッドのための私のコードです。私はここで何が欠けていますか?

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

私は角に新しいですし、任意のヘルプは高く評価されるだろう:私はこのように呼び出すことができ、それは私のデータを与えるよう

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

どこ!

+0

をするときに 'にconsole.log(テスト)'あなたは何を得るのですか?また、あなたのモジュールに 'ngResource'を注入しましたか? – vishtree

+0

@ vishtree-テストは未定義となり、common.servicesモジュールにngResourceを注入しました。 –

答えて

2

ngResource moduleを避け、直接$http serviceを使用することをおすすめします。サーバーにRESTful APIが実装されている場合は、Restangularを使用することをお勧めします。

をサーバが配列を返す場合、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(); 

ngResourceため、前記

$resourceオブジェクトメソッドを呼び出すと、すぐに空の参照(オブジェクトまたは配列に応じて返されることを認識することが重要です)。データがサーバーから戻されると、既存の参照に実際のデータが取り込まれます。

サービスがオブジェクトを要求しているのに配列を受け取っている場合、またはその逆の場合は$resource:badcfg errorが生成されます。サービスがブール値または文字列を返す場合、アクションメソッドは静かに何も返しません。

はチェーン一連の動作に受信したオブジェクト(または配列)の$promise properyを使用します。

$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

関連する問題