AngularJS如何将新评论合并到JSON数组避免覆盖原有历史评论
问题根因
- 初始化
$scope.updatecomments数组时没有同步当前选中项目的历史评论,数组内仅包含你新增的评论,提交时直接覆盖了接口返回的原有评论内容 - 之前尝试的合并写法存在语法错误:
Array.push()返回值是数组长度而非数组本身,在push后链式调用concat不会生效,也没有在切换项目时更新评论数组的基础内容 - 自行编写的合并函数错误地将已解析为对象的
$scope.projectDetails.Comments当做JSON字符串执行JSON.parse,逻辑无法正常运行
修复方案
步骤1:切换项目时同步历史评论
修改showData方法,选中项目时直接把该项目的历史评论同步到$scope.updatecomments,保证数组初始就包含全部历史内容:
$scope.showData = function(x){ $scope.projectDetails = x; // 做兼容判空,避免项目无历史评论时报错 $scope.updatecomments = Array.isArray($scope.projectDetails.Comments) ? [...$scope.projectDetails.Comments] : []; };
步骤2:修改新增评论逻辑
直接往已经包含历史评论的$scope.updatecomments中追加新内容即可,可以增加输入校验避免空评论提交:
$scope.addnewcomment = function() { // 过滤空评论 if (!$scope.NewComment || $scope.NewComment.trim() === '') return; $scope.updatecomments.push({ "Author": "test", "Text": $scope.NewComment.trim() }); // 新增后清空输入框,避免重复添加 $scope.NewComment = ''; }
步骤3:提交逻辑无需修改
你现有的updateProject方法已经把$scope.updatecomments作为评论字段提交,现在这个数组已经包含全部历史+新增评论,不会再出现覆盖问题。
内容的提问来源于stack exchange,提问作者Andiie
相关产品推荐
相关产品推荐

