2017-01-22 11 views
0

私は私のangularAppは、私がホームページをロードすると、私はこのことを理解していない不明プロバイダ:postPromiseProvider < - postPromise < - MainCtrl

Unknown provider: postPromiseProvider <- postPromise <- MainCtrl 

を言ってエラーが出る

var app = angular.module('flapperNews', ['ui.router']); 

app.factory('posts', ['$http',function($http) { 
    var posts = [ 
     { title: 'post 1', upvotes: 5 }, 
     { title: 'post 2', upvotes: 2 }, 
     { title: 'post 3', upvotes: 15 }, 
     { title: 'post 4', upvotes: 9 }, 
     { title: 'post 5', upvotes: 4 } 
    ]; 
    var service = {}; 
    service.getAll = function() { 
     return $http.get('/posts').success(function(data){ 
      angular.copy(data, posts); 
     }); 
    }; 

    service.create = function(post) { 
    return $http.post('/posts', post).success(function(data){ 
     posts.push(data); 
     }); 
    }; 
    service.getPosts = function() { 
     return posts; 
    }; 

    service.upvote = function(post) { 
     return $http.put('/posts/' + post._id + '/upvote').success(function(data){ 
       post.upvotes += 1; 
     }); 
    }; 

    service.get = function(id) { 
     return $http.get('/posts/'+id).then(function(res) { 
      return res.data; 
     }); 
    } 

    return service; 

}]); 


app.controller('MainCtrl', ['$scope', 'postPromise', 
    function($scope, postPromise) { 
     $scope.posts = postPromise; 
     $scope.title = null; 
     $scope.link = null; 
     $scope.test = "Hello World"; 
     $scope.addPost = function() { 
      if (!$scope.title || $scope.title === '') { 
       return; 
      } else { 
       posts.create({ 
        title: $scope.title, 
        link: $scope.link, 
       }); 
       $scope.link = ''; 
       $scope.title = ''; 
      } 
     }; 

     $scope.incrementUpvotes = function(post) { 
      posts.upvote(post); 
     }; 
    } 
]); 

app.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 = ''; 
     }; 
    } 
]); 



app.config([ 
    '$stateProvider', 
    '$urlRouterProvider', 
    function($stateProvider, $urlRouterProvider) { 
     $stateProvider 
      .state('home', { 
       url: '/home', 
       templateUrl: '/home.html', 
       controller: 'MainCtrl', 
       resolve: { 
        postPromise: ['posts', function(posts){ 
         return posts.getAll(); 
        }] 
       } 
      }) 

     .state('posts', { 
      url: '/posts/{id}', 
      templateUrl: '/posts.html', 
      controller: 'PostsCtrl', 
      resolve: { 
       post: ['$stateParams', 'posts', function($stateParams, posts) { 
        return posts.get($stateParams.id); 
       }] 
      } 
     }); 

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

を書かれています。 私はコードを再構築して、コントローラをコントローラの上に置いてみましたが、それでも同じエラーがスローされます。

PS - の記事を取得するためのネットワーク呼び出しが行われた(私はNetwrok呼び出しブラウザでそれを見ることができます)

答えて

1

あなたの工場の名前がpostsないpostPromiseです。

変更あなたのMainCtrlへ:

app.controller('MainCtrl', ['$scope', 'posts', function($scope, posts) { 
}); 
+0

しかし、なぜそれが(記事は「解決」に定義されているコントローラのようなものです)、そのようにPostsCtrlのために働くのでしょうか?それがそこで動作するなら、なぜここにいないのですか? –

+0

注射リストに正しく名前が付けられているので、 'PostsCtrl'で動作します – Chanthu

+0

注射リストに投稿と投稿の両方があります。 私は$ scope.post = postと言うと、返されたデータを解決する –

関連する問題