Angular ui 控制器中的路由器未定义函数

Angular ui router undefined function in controller

我有一个 ui 路线,如下所示

.state('question', {
        url: '/question',
        templateUrl: 'views/templates/question.view.htm',
        controller: 'QuestionController',
        resolve: {
            questions_preload: function(Question) {
                return Question.query();
            }
        }
    });

Question.query() 函数看起来像

Question.query = function () {
            var deferred = $http.get(HATEOAS_URL);
            return SpringDataRestAdapter.processWithPromise(deferred).then(function (data) {
                Question.resources = data._resources("self");
                return _.map(data._embeddedItems, function (question) {
                    return new Question(question);
                });
            });
        };

和应该在开始时预加载问题的控制器是这样的

angular.module('myapp').controller('QuestionController', function ($scope, Question) {

    $scope.questions = questions_preload;

不幸的是,虽然 Question.query() 方法正确运行,但我认为在控制器执行时将容纳数组的 questions_preload 未定义。

我认为这与查询函数中的延迟有关? 有人知道吗?

谢谢, 马克.

您必须将 questions_preload 值注入您的控制器:

angular.module('myapp')
.controller('QuestionController',
  function ($scope, Question, questions_preload) {
    ...
    $scope.questions = questions_preload;

正如您所知道的那样,您只是访问了一个未定义的变量。

Question.query() 中使用 promise 在这里无关紧要,因为 angular ui-router 将等到 promise 解决后才会实例化您的控制器。