gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:35:31 24 4
gpt4 key购买 nike

我在使用 Angular 时遇到了一个小问题。我正在使用 $ngResource从我的服务器解析“评论”的模块:

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>

到目前为止,还不错。

我想这样做,以便在向服务器提交评论时更新 $scope.comments 属性,从而更新 View 。我更新了 commentsController $scope 以拥有一个方法:submitCommentngSubmit 指令调用:

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

$scope.comments = comment.query();

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

调用此方法时,“评论”已成功发送到服务器,但 View 未正确更新。回想一下,我的 ngRepeat 指令是在 li 上定义的。当我提交“评论”时,会创建一个新的 li (即呈现一个新的项目符号点),但正文是空的。我做错了什么?

更新:我注意到,如果我调用 $scope.comments.push(commentToSave); $save 之外 回调, View 被正确更新。我认为当我调用 $savecommentToSave 正在被更改,无论如何都是这样。

最佳答案

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

如果这是您的选择,您应该从后端返回创建的值。这很有用,因为在网页中创建项目时,您通常没有唯一标识符。然后可以在将 ID 插入数据库时​​创建该 ID。因此,当您发布新项目时,您会使用“创建的属性”进行响应,以便您的 Controller 拥有该项目的正确 ID。如果您更改任何值并使用 $save 第二次更新该项目,您尤其需要它。

如果您不想在保存时使用服务器的响应,只需将值复制到一个新变量并在将项目推送到评论数组时使用它。我不确定您将如何在 $resource 中关闭它工厂,也没有看到任何选项。

关于javascript - 使用 ngResource 模块时,我的模型没有正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com