2017-03-17 20 views
0

index.htmlからtitleDetails.htmlまで特定のタイトルを開くことができるウェブページのトラブルシューティングの最中です。AngularJS ng-clickが突然動作を停止しました

ただし、index.htmlng-clickは突然すべての作業を停止しました。リンクに影響する可能性のある変更は行っていませんでした。それはすべてうまくいっています(index.htmlからtitleDetails.htmlへのページのリダイレクト)。以下は

Original post here

私のコードです:

app.js

(function() { 
    angular 
    .module("BlogApp", []) 
    .controller("BlogController", BlogController); 

    function BlogController($scope, $http) { 
     $scope.createPost = createPost; 
     $scope.deletePost = deletePost; 
     $scope.editPost = editPost; 
     $scope.updatePost = updatePost; 
     $scope.postDetail = null; 

    function init() { 
     getAllPosts(); 
    } 
    init(); 

    function titleDetails(post){ 
     $scope.postDetail = post; 
     window.location = "/titleDetails.html"; 
    } 

    function updatePost(post){ 
     console.log(post); 
     $http 
     .put("/api/blogpost/"+post._id, post) 
     .success(getAllPosts); 
    } 

    function editPost(postId){ 
     $http 
     .get("/api/blogpost/"+postId) 
     .success(function(post){ 
      $scope.post = post; 
     }); 
    } 

     function deletePost(postId){ 
      $http 
      .delete("/api/blogpost/"+postId) 
      .success(getAllPosts); 
     } 

     function getAllPosts(){ 
      $http 
      .get("/api/blogpost") 
      .success(function(posts) { 
       $scope.posts = posts; 
      }); 
     } 

     function createPost(post) { 
      console.log(post); 
      $http 
      .post("/api/blogpost",post) 
      .success(getAllPosts); 
     } 
    } 
})(); 

index.htmlを

<!DOCTYPE html> 
<html lang="en" ng-app="BlogApp"> 
<head> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script> 
    <script src="app.js"></script> 
    <title>Title</title> 
</head> 
<body> 
    <div class="container" ng-controller="BlogController"> 
     <h1>Blog</h1> 
      <input ng-model="post.title" class="form-control" placeholder="title"/> 
      <textarea ng-model="post.body" class="form-control" placeholder="body"></textarea> 
      <button ng-click="createPost(post)" class="btn btn-primary btn-block">Post</button> 
      <button ng-click="updatePost(post)" class="btn btn-success btn-block">Update</button> 

      <div ng-repeat="post in posts"> 
       <h2> 
       <a ng-click="titleDetails(post)">{{ post.title }} </a> 
        <a ng-click="editPost(post._id)" class="pull-right"><span class="glyphicon glyphicon-pencil"></span></a> 
        <a ng-click="deletePost(post._id)" class="pull-right"><span class = "glyphicon glyphicon-remove"></span></a> 
       </h2> 
       <em>{{post.posted}}</em> 
       <p>{{post.body}}</p> 
      </div> 
    </div> 
</body> 
</html> 

titleDetails.html:

<!DOCTYPE html> 
<html lang="en" ng-app="BlogApp"> 
<head> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script> 
    <script src="app.js"></script> 
    <title>Title</title> 
</head> 
<body> 
    <div class="container" ng-controller="BlogController"> 
     <h1>Blog</h1> 
      <div> 
       <h2> 
        <a>{{ postDetail.title }} </a> 
       </h2> 

       <em>{{postDetail.posted}}</em> 
       <p>{{postDetail.body}}</p> 
      </div> 
    </div> 
</body> 
</html> 
+0

あなたのコントローラに '$ scope.titleDetails = titleDetails'がありません。 – eminlala

+0

ありがとう@ ex0dm3nt! – gymcode

+0

私の喜び:)。私はこれを追加の勧告と答えとして掲示するでしょう。 – eminlala

答えて

1

あなたのコントローラで$scope.titleDetails = titleDetails;が欠落しています。

さらに、controller asの構文を使用することをお勧めします。

だから、このようなものになるだろう:

index.htmlを

<div class="container" ng-controller="BlogController as blogCtrl"> 
... 
<a ng-click="blogCtrl.titleDetails(post)">{{ blogCtrl.post.title }} </a> 

あなたのコントローラ

function BlogController($scope, $http) { 
    var vm = this; 
    vm.titleDetails = titleDetails; 
    //rest of your code using 'vm' instead of '$scope' 

この方法で、あなたは$scopeの使用を停止することができます。

詳細はhereです。

関連する問題