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 解决后才会实例化您的控制器。
我有一个 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 解决后才会实例化您的控制器。