从ui route

时间:2016-04-28 07:45:33

标签: angularjs angular-ui-router

我试图找出如何从控制器移动查询以在路线中解决。

现在我在我的控制器中有这个以获得一些项目,项目按一些搜索/标准对象计算(用于分页目的)

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 () {
            (??????)
        }
    }
})

1 个答案:

答案 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 );
        }],
    }
})