Javascript 使用ngResource模块时,我的模型没有正确更新

Javascript 使用ngResource模块时,我的模型没有正确更新,javascript,angularjs,Javascript,Angularjs,我有一个小问题,角度。 我正在使用模块解析来自我的服务器的“评论”: var app = angular.module('app', ['ngResource']); app.factory('comment', function($resource) { return $resource('/comments'); }); app.controller('commentsController', function($scope, comment) { $scope.commen

我有一个小问题,角度。 我正在使用模块解析来自我的服务器的“评论”:

var app = angular.module('app', ['ngResource']);    
app.factory('comment', function($resource) {
  return $resource('/comments');
});
app.controller('commentsController', function($scope, comment) {
  $scope.comments = comment.query();
});
我使用
ngRepeat
指令显示所有注释:

<li ng-repeat="comment in comments">
    {{ comment.comment }}
</li>
调用此方法时,“注释”将成功发送到服务器,但是视图未正确更新。回想一下,我的
ngRepeat
指令是在
li
上定义的。当我提交“评论”时,会创建一个新的
li
(即,渲染一个新的项目符号),但正文是空的。我做错了什么


更新:我注意到,如果调用
$scope.comments.push(commentToSave)
$save
回调之外,视图已正确更新。我想当我调用
$save
时,
commentToSave
正在被更改,无论如何都是这样。

有时候,我会对restapi返回的答案产生问题。所以在你的情况下,我会这样做:

commentToSave.$save(function(savedComment) { 
    $scope.comments.push(angular.fromJson(savedComment));
});

复制要不更改的注释:

app.controller('commentsController', function($scope, comment) {

  $scope.comments = comment.query();

  $scope.submitComment = function() {
    var commentToSave = new comment(), commentToDisplay = {};
    angular.copy(commentToDisplay, commentToSave);
    angular.copy($scope.comment, commentToSave);
    commentToSave.$save(function() { 
      $scope.comments.push(commentToDisplay);
    });
  };
});

$save函数更新响应中已保存项的值。因此,如果响应为空,
commentToSave
的属性也将为空

如果这是一个选项,您应该从后端返回创建的值。这很有用,因为在网页中创建项目时,通常没有唯一标识符。例如,可以在将ID插入数据库时创建ID。因此,当您发布一个新项目时,您将使用“创建的属性”进行响应,以便您的控制器持有该项目的正确ID。如果使用
$save
更改任何值并再次更新项目,则特别需要此选项


如果不想在保存时使用服务器的响应,只需将值复制到新变量,并在将项推送到注释数组时使用该变量。我不确定您在工厂如何关闭此功能,也没有看到任何选项。

您的后端如何响应?我认为$save函数会更新响应中项目的值,因此如果它为空,commentToSave的属性也将为空。(你可以在浏览器开发工具的网络选项卡中看到响应,如果成功函数中有参数,
commentosave.$save(function(result){};
),你是否定义了
$scope.comment
?@Patrick你一针见血,朋友。我想知道,有没有办法阻止这种行为。。?我能理解这种行为在许多情况下是多么有用,但在这里它是不必要的。另外,请留下一个答案,我会接受的。
app.controller('commentsController', function($scope, comment) {

  $scope.comments = comment.query();

  $scope.submitComment = function() {
    var commentToSave = new comment(), commentToDisplay = {};
    angular.copy(commentToDisplay, commentToSave);
    angular.copy($scope.comment, commentToSave);
    commentToSave.$save(function() { 
      $scope.comments.push(commentToDisplay);
    });
  };
});