2015-10-07 47 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

我试图避免这种语法。我想让我的功能更加模块化。 –