3

Angular の $resource サービスの使用に問題があります。私の API はデータ オブジェクトのエラー フィールドと共に完全な応答 (ヘッダーなど) を返すため、応答から特定のオブジェクトを取得する必要があります。これは $http サービスで行うのはかなり簡単ですが、$resource サービスでこれらのパラメーターを取得する場所がわかりません。以下は、動作中の $http リクエストです。

$http({
  method  : 'GET',
  url     : 'http://api.discussorama.com/v1/topics',
  headers : {'X-Api-Secret': 'xxx', 'Authorization': 'xxx', 'Content-Type': 'application/x-www-form-urlencoded'}  
})
.then(function(response) {
  console.log(response);
  $scope.topics = response.data.topics;
});

そして、これは $resource を使用した同じリクエストで失敗した試みです:

var Topic = $resource('http://api.discussorama.com/v1/topics/:id', {id: '@id'}, {
  query: {
    isArray: false,
    method: 'GET',
    headers: {'X-Api-Secret': 'xxx', 'Authorization': 'xxx', 'Content-Type': 'application/x-www-form-urlencoded'}
  }
 });

var response = Topic.query();
$scope.topics = response.topics;
console.log(response);

編集:上記のコードを更新した後、これがコンソールに表示されます。

f {$promise: Object, $resolved: false, $get: function, $save: function, $query:    function…}
  $promise: Object
  $resolved: true
  error: false
  topics: Array[10]
  __proto__: f

ただし、コンソールログを次のように変更すると:

console.log(response.topics);

コンソールは単純に次を返します。

undefined

これのどこが間違っているのですか?問題のページへのリンクが役立つ場合は、http://hwaelapps.com/discuss/web

4

1 に答える 1

5

$resource が返すという約束を処理していません。上記の $http 呼び出しのように処理する必要があります。

var Topic = $resource('http://api.discussorama.com/v1/topics/id', { id: '@id'}, {
  query: {
    isArray: false,
    method: 'GET',
    headers: {'X-Api-Secret': 'xxx', 'Authorization': 'xxx', 'Content-Type': 'application/x-www-form-urlencoded'}
  }
});

var response = Topic.query();
response.$promise.then(function(data){
    $scope.topics = data.topics; //Changed data.data.topics to data.topics
});
于 2014-04-25T21:28:38.560 に答える