2015-10-07 35 views
1

我有以下的決心:角注射進入的決心控制器日誌不確定

.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模塊。

FYI-一切正常。其他http請求很好。這個也很好。它只是不會將帖子插入控制器。

+0

我不明白爲什麼這不起作用。你能發佈你的服務代碼嗎? –

+0

@AnidMonsur sure –

+0

@AnidMonsur up –

回答

2

無極鏈在這裏休息。

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

你不回的承諾,因此posthttpService.baseGet請求已完成之前解決,undefined

+0

哇,非常漂亮!你的第二點是不正確的。 ui-router處理'解開'承諾。 –

+0

當然,對不起。 – estus

0

試試這個:

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

如果這項工作我要大喊角隊 –

+0

以及我需要注入postsService和stateParams –

+0

我試圖避免這種語法。我想讓我的功能更加模塊化。 –