AngularJS ng-click突然停止工作

时间:2017-03-17 16:37:44

标签: javascript html angularjs

我正在对能够打开index.htmltitleDetails.html的特定标题的网页进行排查。

然而,我ng-click中的index.html突然停止了工作。我没有做任何可能影响链接的更改。它一直很好用(从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>

1 个答案:

答案 0 :(得分: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