ui-路由器解析控制器中的未定义
ui-router resolve undefined in controller
我无法从 ui-router 的解析中获取数据,它给了我 undefined
,下面是我的代码
控制器
angular
.module('App')
.controller('PostController', PostController);
/** @ngInject */
function PostController(questionData) {
var vm = this;
vm.post = questionData;
console.log("Post Data in Ctrl", questionData);
}
工厂
我在 bootData
中有一个 post 的缓存列表,首先我检查 post 和 id
是否在缓存数组中,如果找到 return post Object
,如果不提出请求并return 承诺。
function postService(dataService, $filter, $q) {
return {
post : post
}
// Cached promise of posts
var bootData = dataService.boot();
function post(id) {
bootData.success(function(res){
var postList = res.featured.posts.data;
var post = $filter('filter')(postList, {id: id})[0];
// Check if post with id found return it
if (post && post.id > 0) {
var deferred = $q.defer();
deferred.resolve(post);
return deferred.promise;
} else {
// Make request to api and return promise
return dataService.get('questions/' + id);
}
});
}
}
路线
resolve: {
// Check for logged in
loginRequired: function(auth){
return auth.loginRequired();
},
postData: function(postService, $stateParams) {
return postService.post($stateParams.id);
}
}
我卡在这里了,我觉得工厂方法有问题 post(id)
。请帮助
您没有从 postService.post
方法中 returning 任何内容(相当于 undefined
)。相反,请确保您 return 承诺对象 return bootData.success
:
function post(id) {
return bootData.success(function(res) {
var postList = res.featured.posts.data;
var post = $filter('filter')(postList, {id: id})[0];
// Check if post with id found return it
if (post && post.id > 0) {
return $q.when(post);
} else {
// Make request to api and return promise
return dataService.get('questions/' + id);
}
});
}
另外,避免使用延迟对象,在你的情况下你需要 $q.when
。
我无法从 ui-router 的解析中获取数据,它给了我 undefined
,下面是我的代码
控制器
angular
.module('App')
.controller('PostController', PostController);
/** @ngInject */
function PostController(questionData) {
var vm = this;
vm.post = questionData;
console.log("Post Data in Ctrl", questionData);
}
工厂
我在 bootData
中有一个 post 的缓存列表,首先我检查 post 和 id
是否在缓存数组中,如果找到 return post Object
,如果不提出请求并return 承诺。
function postService(dataService, $filter, $q) {
return {
post : post
}
// Cached promise of posts
var bootData = dataService.boot();
function post(id) {
bootData.success(function(res){
var postList = res.featured.posts.data;
var post = $filter('filter')(postList, {id: id})[0];
// Check if post with id found return it
if (post && post.id > 0) {
var deferred = $q.defer();
deferred.resolve(post);
return deferred.promise;
} else {
// Make request to api and return promise
return dataService.get('questions/' + id);
}
});
}
}
路线
resolve: {
// Check for logged in
loginRequired: function(auth){
return auth.loginRequired();
},
postData: function(postService, $stateParams) {
return postService.post($stateParams.id);
}
}
我卡在这里了,我觉得工厂方法有问题 post(id)
。请帮助
您没有从 postService.post
方法中 returning 任何内容(相当于 undefined
)。相反,请确保您 return 承诺对象 return bootData.success
:
function post(id) {
return bootData.success(function(res) {
var postList = res.featured.posts.data;
var post = $filter('filter')(postList, {id: id})[0];
// Check if post with id found return it
if (post && post.id > 0) {
return $q.when(post);
} else {
// Make request to api and return promise
return dataService.get('questions/' + id);
}
});
}
另外,避免使用延迟对象,在你的情况下你需要 $q.when
。