2016-04-16 5 views
0

私はこのチュートリアルの後にAngularJSを学びたいと思っています:https://thinkster.io/mean-stack-tutorial空のページを表示するAngularJSのui-route

"新しいコメントの作成"の直前に、私はその部分に立ちました。私が抱えている問題は、「コメント」をクリックすると、空白のページが水平線だけで表示されることです。

投稿のタイトルは、2つの偽のコメントで一番上にあるはずです。ここに私のコードは次のとおりです。

のindex.html:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Flapper News</title> 

     <!-- BOOTSTRAP --> 
     <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 

     <!-- ANGULARJS --> 
     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script> 
     <script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.js"></script> 
     <script src="app.js"></script> 

     <style> .glyphicon-thumbs-up { cursor:pointer } </style> 
    </head> 

    <body ng-app="flapperNews" style="padding: 50px"> 
     <div class="row"> 
      <div class="col-md-6 col-md-offset-3"> 
       <ui-view></ui-view> 
      </div> 
     </div> 

     <!-- Inline home template --> 
     <script type="text/ng-template" id="/home.html"> 
      <div class="page-header"> 
       <h1>Flapper News</h1> 
      </div> 

      <!-- Show all the posts --> 
      <div ng-repeat="post in posts | orderBy: '-upvotes'" style="margin-bottom: 10px;"> 

       <div class="row"> 
        <div class="col-md-2" style="width: 80px;"> 
         <span class="glyphicon glyphicon-thumbs-up" ng-click="incrementUpvotes(post)"></span> 
         &nbsp;&nbsp;{{post.upvotes}} 
        </div> 

        <div class="col-md-9"> 
         <span style="font-size:20px;"> 
          <a ng-show="post.link" href="{{post.link}}">{{post.title}}</a> 
          <span ng-hide="post.link">{{post.title}}</span> 
         </span> 

         <br /> 
         <span style="font-size: 12px;"> 
          <a href="#/posts/{{$index}}">Comments</a> l 
          <a href="#/posts/{{$index}}">Share</a> 
         </span> 
        </div> 
       </div> 
      </div> 

      <!-- Form to make new posts --> 
      <form ng-submit="addPost()" style="margin-top:30px;"> 
       <h3>Add New Post</h3> 

       <div class="form-group"> 
        <input type="text" class="form-control" placeholder="Title" ng-model="title" /> 
       </div> 
       <div class="form-group"> 
        <input type="text" class="form-control" placeholder="Link" ng-model="link" /> 
       </div> 

       <button type="submit" class="btn btn-primary" ng-click="submit">Post</button> 
      </form> 
     </script> 

     <!-- Inline Posts section --> 
     <script type="text/ng-template" id="/posts.html"> 

      <!-- Display title as header --> 
      <div class="page-header"> 
       <h3> 
        <a ng-show="post.link" href="{{post.link}}">{{post.title}}</a> 
        <span ng-hide="post.link">{{post.title}}</span> 
       </h3> 
      </div> 

      <!-- Display the comment --> 
      <div ng-repeat="comment in post.comments | orderBy:'-upvotes'"> 
       <span class="glyphicon glyphicon-thumbs-up" ng-click="incrementUpvotes(comment)"></span> 
       {{comment.upvotes}} - by {{comment.author}} 
       <span style="font-size:20px; margin-left:10px;">{{comment.body}}</span> 
      </div> 
     </script> 
    </body> 
</html> 

app.js

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

app.factory('posts', [function() { 
    var o = { 
     posts: [] 
    }; 

    return o; 
}]); 

app.config([ 
    '$stateProvider', 
    '$urlRouterProvider', 

    function($stateProvider, $urlRouterProvider) { 
     $stateProvider 
     .state('home', { 
      url: '/home', 
      templateUrl: '/home.html', 
      controller: 'MainCtrl' 
     }); 

     $stateProvider 
     .state('posts', { 
      url: '/posts/{id}', 
      templateUrl: '/posts.html', 
      controller: 'PostsCtrl' 
     }); 

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

app.controller('MainCtrl', ['$scope', 'posts', function($scope, posts) { 
    $scope.posts = posts.posts; 

    $scope.addPost = function() { 
     if(!$scope.title || $scope.title === '') { 
      return; 
     } 

     $scope.posts.push({ 
      title: $scope.title, 
      link: $scope.link, 
      upvotes: 0, 
      comments: [ 
       {author: 'Joe', body: 'Cool Post!', upvotes: 0}, 
       {author: 'Bob', body: 'Great idea but no!', upvotes: 0} 
      ]}); 

     $scope.title = ''; 
     $scope.link = ''; 
    }; 

    $scope.incrementUpvotes = function(post) { 
     post.upvotes += 1; 
    } 

}]); 

app.controller('PostsCtrl', [ 
    '$scope', 
    '$stateParams', 
    'posts', 
    function($scope, $stateParams, posts) { 
     $scope.posts = posts.posts['$stateParams.id']; 
}]); 

私はそれが何も表示しないようにするために私が間違ってやっているかわからないんだけど。どんな助けもありがとう、ありがとう!

コンソールのエラー:

The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.

Use of getPreventDefault() is deprecated. Use defaultPrevented instead.

+0

パスの問題または設定の問題と思われます。あなたは単純なplnkrを置くことができます – Gary

+0

コンソールでエラーが発生しています – Gary

+0

前にplnkrを使ったことがありません。私はOPにエラーを掲載しました。 –

答えて

1

あなたのコードがあるため、複数の問題により動作しません。 1.あなたのpostsaddPosts()内の任意のidプロパティを追加することが、一方で、それを期待されていませんアクセスposts.posts['$stateParams.id']

  1. コントローラで$scope.postsと宣言している間は、コメントテンプレートでpostを使用しています。

私はidプロパティを追加し、他の問題を修正するためjsbinを作成して、それが機能するようになりました。

+0

ありがとうございます!すべてがうまくいく! –

+0

私の喜び。 :) –

関連する問題