我怎么可能$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 :(得分: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
服务,因为在实例化控制器之前已经调用了它。您可能根本不需要注入此服务。
我希望我澄清了这一点,它会帮助你理解。