簡體   English   中英

角度注入解析到控制器記錄未定義

[英]angular injecting resolve into controller logging undefined

我有以下解決方案:

.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
}

當我嘗試從解析中注入帖子時,出現了一個未定義的“帖子”。 我嘗試將日志記錄在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請求也可以。 這個也很好。 它只是不將帖子注入控制器。

承諾鏈在這里中斷。

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

您不會返回承諾,因此在httpService.baseGet請求完成之前, post將解析為undefined

嘗試這個:

.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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM