Angular在控制器日志中注入resolve未定义

angular injecting resolve into controller logging undefined

本文关键字:注入 resolve 未定义 日志 控制器 Angular      更新时间:2023-09-26

我有以下解析:

.state('posts', {
      url: '/posts/{id}',
      templateUrl: 'posts.html',
      controller: 'postsController as postsCtrl',
      resolve: {
        post: getSinglePostWrapper
      }
    })

和辅助函数

getSinglePostWrapper.$inject = ['postsService', '$stateParams'];
function getSinglePostWrapper(postsService, $stateParams) {
    return postsService.getSinglePost($stateParams.id);
}

我的控制器是这样的

angular.module('flapperNews')
.controller('postsController', postsController);
postsController.$inject = ['postsService', 'post'];
function postsController(postsService, post) { 
   var vm = this;
   vm.post = post;
   console.log(post); //undefined here
}

我得到一个未定义的"post",当我试图从解析注入的帖子。我试着在getSinglePostWrapper函数中记录帖子,它记录了正确的对象。我似乎失去了一些绑定或从解析到控制器的东西。

文章服务

angular.module('flapperNews')
.factory('postsService', postsService);
postsService.$inject = ['httpService'];
function postsService(httpService) {
  return {
        getSinglePost: getSinglePost
  }
  function getSinglePost(postId) {
        httpService.baseGet('/posts/' + postId)
        .then(function(data) {
            return data;
        }, function(data) {});
  }
}

httpservice

因为
angular.module('httpService', [])
.factory('httpService', httpService);
httpService.$inject = ['$http', '$q'];
function httpService($http, $q) {
  return {
        baseGet: baseGet
  }
  function baseGet(url) {
        return $http.get(url).then(
                function (result) {
                    return result.data;
                },
                function (result) {
                    return $q.reject(result);
                }
        );
    }
}

,我已经把httpservice注入到我声明flapperNews模块的第一个地方。

供参考-一切都在工作。其他http请求也可以。这个也很好。它只是不把post注入控制器

承诺链在这里断裂。

  function getSinglePost(postId) {
        httpService.baseGet('/posts/' + postId)
        .then(function(data) {
            return data;
        }, function(data) {});
  }

您没有返回承诺,因此post将在httpService.baseGet请求完成之前解析为undefined

try this:

.state('posts', {
      url: '/posts/{id}',
      templateUrl: 'posts.html',
      controller: 'postsController as postsCtrl',
      resolve: {
        post: function('postsService', '$stateParams') {
           return postsService.getSinglePost($stateParams.id);
      }
    })
angular.module('flapperNews')
.controller('postsController', function($scope, post){
    $scope.post = post;
   console.log($scope.post); //undefined here
});