2016-04-28 2 views
2

私は、コントローラからルートに解決するクエリを移動する方法を理解しようとしています。uiルートのクエリからレスポンスヘッダを解決する

今、今、私はこのクエリはで解決したい、私はいくつかのプロジェクトを得るために、私のコントローラでこれを持っており、プロジェクトが(ページネーションの目的のために)いくつかの検索/ Criteriaオブジェクトによって

Projects.query(*{some crit}* ,function (projects, getResponseHeaders) { 
    $scope.projects = projects; 
    $scope.projectsCount = getResponseHeaders('x-total-count'); 
}); 

を数えますuiのルータ、ので、私は 'プロジェクト'と 'projectsCount'は既にコントローラに解決されます...どのように行うことができますか?

.state('manage.projects', { 
    url: '/projects', 
    controller: 'ProjectsController', 
    templateUrl: 'projects.html', 
    resolve: { 
     projects: function (Projects) { 
      return Projects.query(*{some crit}*).$promise; (?????) 
     }, 
     projectsCount: function() { 
      (??????) 
     } 
    } 
}) 

答えて

0

応答ヘッダーはメタデータである必要がありますが、ETagヘッダーのように必要な場合もあります。 $scope.projectsCount = $scope.projects.length;

あなたが投稿したやり方を絶対にしたいのであれば、解決された値をオブジェクトにラップすることをお勧めします。1)解決されたデータを追加するときにコードの変更が少なくて済み、2)あなたの状況に必要なので、サービスコールを2回しないでください。

.state('manage.projects', { 
    url: '/projects', 
    controller: 'ProjectsController', 
    templateUrl: 'projects.html', 
    // 'resolve' functions need to return Q promises, not jQuery promises. 
    resolve: { 
     baseDataResolved: ['$log', '$q', 'Projects', function ($log, $q, Projects) { 
      var qDeferred = new $q.defer(); 
      // Assuming your 'Projects.query' returns a jQuery promise. 
      Projects.query(*{some crit}*) 
      .done(function success(responseData, status_text, jqXHR) { 
       var baseData = { 
        'projects':responseData, 
        'projectsCount':jqXHR.getResponseHeader('x-total-count'), 
       }; 
       qDeferred.resolve(baseData); 
      }) 
      .fail(function failure(jqXHR, status_text, error_thrown) { 
       $log.error(error_thrown); 
       qDeferred.reject(error_thrown); 
      }); 
      return(qDeferred.promise); 
     }], 
    } 
}) 
関連する問題