2016-05-04 57 views
-3

這怎麼可能,我可以做$scope.post = post;而且我沒有做$scope.post = posts.post;如何在我的控制器中訪問該帖子?

app.js

angular.module('flapperNews', ['templates','ui.router']) 
.config([ 
'$stateProvider', 
'$urlRouterProvider', 
function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: 'home/_home.html', 
     controller: 'MainCtrl', 
     resolve: { 
     postPromise: ['posts', function(posts){ 
      return posts.getAll(); 
     }] 
     } 
    }) 
    .state('posts', { 
     url: '/posts/{id}', 
     templateUrl: 'posts/_posts.html', 
     controller: 'PostsCtrl', 
     resolve: { 
     post: ['$stateParams', 'posts', function($stateParams, posts) { 
      return posts.get($stateParams.id); 
     }] 
     } 
    }); 

    $urlRouterProvider.otherwise('home'); 
}]) 

postCtrl.js

angular.module('flapperNews') 
.controller('PostsCtrl', [ 
    '$scope', 
    'posts', 
    'post', 
    function($scope, posts, post){ 
     $scope.post = post; 
     $scope.addComment = function(){ 
      if($scope.body === '') { return; } 
      $scope.post.comments.push({ 
      body: $scope.body, 
      author: 'user', 
      upvotes: 0 
      }); 
      $scope.body = ''; 
     }; 
}]); 
+0

您將post作爲參數傳遞給您的控制器(因此注入它),爲什麼不可能? –

+0

哪裏是後期定義?我想我會做這個$ scope.post = posts.post而不是 – fenec

+0

我沒有跟着你。您正在向控制器注入信息。我假設你把它放在那裏是有原因的。如果你在調試器中檢查它,它是什麼?它必須在某個地方定義,否則注入它會觸發一個錯誤。 –

回答

0

這很簡單。

你在你的posts狀態的聲明中寫道:

resolve: { 
    post: ['$stateParams', 'posts', function($stateParams, posts) { 
     return posts.get($stateParams.id); 
    }] 
} 

你在這個函數注入你posts服務並撥打電話(一些API,等等)。該函數返回promise。首先在狀態聲明中的屬性resolve將等待解決已寫入的所有承諾。之後,它會將所有已解決的承諾的結果注入控制器。

讓我們在控制器上一看:

angular.module('flapperNews') 
     .controller('PostsCtrl', [ 
      '$scope', 
      'posts', 
      'post', 
      function($scope, posts, post){ 
       $scope.post = post; 
       ... 
      }; 
}]); 

在注入部分,我們可以看到posts - 注射服務。另外post - 這將是一個解決的承諾,來自您的狀態的解決部分。

這意味着您不必再次調用您的posts服務,因爲在實例化控制器之前已經調用了它。你可能根本不需要注入這項服務。

我希望我澄清一點,它會幫助你理解。

相關問題