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