为什么这个控制器在使用AngularJs使用$ Post方法后没有更新视图?

时间:2014-09-08 05:27:48

标签: angularjs

在我的角度应用程序中,我有一个控制器如下:

mainCtrl.controller('mainController', function($scope, $http, Comment) {
        // GET ALL COMMENTS ====================================================
        Comment.getQuestion()
            .success(function(data) {
                $scope.qa = data;
            });

            $scope.qusdata = {};

            //Post Question 
            $scope.postquestion = function() {

            $scope.loading = true;

            Comment.PostQuestion($scope.qusdata)
                .success(function(data) {
                    console.log(data);
                    $scope.response = data;
                    $scope.loading = true;
                    // if successful, we'll need to refresh the comment list
                    Comment.getQuestion()
                        .success(function(getData) {
                            console.log(getData);
                            $scope.qa = getData;
                            $scope.loading = false;
                        });

                })
                .error(function(data) {
                    console.log(data);
                });
            };

        });

在视图中我列出如下:

<div class="container"  ng-controller="mainController" >
        <div class="row"  ng-hide="loading" ng-repeat="q in qa.data" >
            <div class="col-md-12 col-xs-12 col.sm.12" >
                <div class="artist-data pull-left" style = "background-color:#BEB7B7;">
                    <!-- Div for user image -->
                    <div class="artst-pic pull-left">
                        <img width = 100px; height:60px; ng-src="{{image(q.userID)}}" alt="" class="img-responsive"/>
                    </div>
                    <!-- Div for voting for question-->
                    <div style = "margin-top:85px; margin-left: 10px;">
                        <div class=" pull-left" >
                            <a class="btn btn-xs btn-hover btn-primary" ng-click = "upVote(q.id)">
                                <span class="glyphicon glyphicon-thumbs-up"></span>
                            </a>
                            <input  class = "text" ng-model="q.votes"></input>
                            <a class="btn btn-xs btn-hover btn-danger" ng-click = "downVote(q.id)">
                                <span class="glyphicon glyphicon-thumbs-down"></span>
                            </a>
                        </div>
                    </div>
                    <!-- Div for imformation about the user -->
                    <div class="artst-prfle pull-left">
                        <div class = "col-md-12" >
                            <div class="art-title">
                                <p ng-bind-html = "q.question | emoji">{{ q.question}}</p>
                                <span class="artst-sub" >By 
                                    <span class="byname" >{{ q.users.first_name }} {{ q.users.last_name }}</span> 
                                    <span class="daysago">around {{ q.created_at }}</span>
                                </span>
                                <span>
                                    <div>
                                        <a class="glyphicon glyphicon-comment"></a> 
                                        <a ng-click="select(q.id)" >Answer</a>
                                    </div>
                                </span>
                            </div>
                        </div>
                    </div>

现在当我点击模板中的Add Question按钮时,它会调用postquestion方法,并且对REST api进行成功的POST调用。但是视图在刷新之前不会更新。我做错了什么?

1 个答案:

答案 0 :(得分:1)

尝试使用此post方法:

 $scope.postquestion = function() {

            $scope.loading = true;

            Comment.PostQuestion($scope.qusdata)
                .success(function(data) {
                    console.log(data);
                    $scope.response = data;
                    $scope.loading = true;
                    // if successful, we'll need to refresh the comment list
                    Comment.getQuestion()
                        .success(function(getData) {
                            $scope.qa=null;
                            console.log(getData);
                            $scope.qa = getData;
                            $scope.loading = false;
                            $scope.$apply();
                        });

                })
                .error(function(data) {
                    console.log(data);
                });
            };