我试图找出如何从控制器移动查询以在路线中解决。
现在我在我的控制器中有这个以获得一些项目,项目按一些搜索/标准对象计算(用于分页目的)
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 :(得分:0)
您的响应标头应该是元数据,但有时仍然需要,例如ETag标头。你可以做一些简单的事情,比如$scope.projectsCount = $scope.projects.length;
如果您绝对希望按照发布的方式进行,我建议将已解析的值包装在对象中,因为1)在添加已解析的数据时需要更少的代码修改; 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 );
}],
}
})