在Angular中发出HTTP POST请求后刷新内容的正确方法是什么?

//controller.js
var hudControllers = angular.module('hudControllers', []);

hudControllers.controller('PropertyDetailsCtrl',
  ['$scope','$window','$http', function ($scope,$window,$http) {

   //I want to reload this once the newCommentForm below has been submitted
   $http.get('/api/comments')
    .success(function(data) {$scope.comments = {"data":data};}})
    .error(function(data) {...);

   $scope.newCommentForm = function(){

      newComment=$scope.newComment;
      requestUrl='/api/comments';
      var request = $http({method: "post",url: requestUrl,data: {...}});
      request.success(function(){
        //How do I refresh/reload the comments?
        $scope.comments.push({'comment':'test'}); //Returns error - "TypeError: undefined is not a function"
      });
  };

}]);

//template.ejs
<div class="comment">
  <ul>
     <li ng-repeat="comment in comments.data">{{comment.comment}}</li>
 </ul>
</div>

谢谢。

最佳答案

有很多方法可以做到。我仍然想向您展示最简单的方法(根据您的需求)。

假设您有“first.html”页面,并且“PropertyDetailsCtrl”已与该页面相关联。
现在,您可以在html中这样写:

 with very first-div
 <div ng-controller="PropertyDetailsCtrl" ng-init="initFirst()">
.... Your page contents...
</div>   (This will initialize your controller and you will have execution of your first method 'initFirst()'.

在您的.js端...
var hudControllers = angular.module('hudControllers', []);

hudControllers.controller('PropertyDetailsCtrl',
  ['$scope','$window','$http', function ($scope,$window,$http) {

   //I want to reload this once the newCommentForm below has been submitted
$scope.initFirst=function()
{


   $http.get('/api/comments')
    .success(function(data) {...})
    .error(function(data) {...);

        //You need to define your required $scope.....

     $scope.myVariable=data;

 };

现在在适当的时间(您知道何时),将调用以下方法。
   $scope.newCommentForm = function(){

      newComment=$scope.newComment;
      requestUrl='/api/comments';
      var request = $http({method: "post",url: requestUrl,data: {...}});
      request.success(function(data){
        //How do I refresh/reload the comments?
             //without calling anything else, you can update your $scope.myVariable here directly like this


       $scope.myVariable=data


      });

      //or else you can call 'initFirst()' method whenever and wherever needed like this,

    $scope.initFirst();


  };

}]);

我希望这将有所帮助。

09-25 15:50