gpt4 book ai didi

json - angularJs TypeError:将循环结构转换为JSON

转载 作者:行者123 更新时间:2023-12-03 14:51:25 27 4
gpt4 key购买 nike

我有一个像这样的小型AngularJs应用程序:

 // html

<div ng-repeat="project in projects">
<h3>{{ project.id }}</h3>
<h3>{{ project.title }}</h3>
<div ng-repeat="task in project.tasks">
<h4>{{ task.id }}. {{ task.title }}</h4>
<button class="btn btn-default" ng-click="showEditTask=true">Edit Task</button>
<div class="box row animate-show-hide" ng-show="showEditTask">

<h2>Create a New Task</h2>
<form name="newTaskForm" class="form-horizontal">
Title: <br />
<input ng-model="new_task.title" type="text" id="title" name="title" class="form-control" placeholder="Title" required /><br />

Project: <br />
<select ng-model="new_task.project" ng-options="project.title for project in projects" class="form-control"></select><br>
</form>

<button class="btn btn-success" ng-click="createTask(new_task)" ng-disabled="!newTaskForm.title.$valid">create</button>
</div>
</div>
</div>


// app.js

concernsApp.factory('ConcernService', function ($http, $q) {

...

update: function (obj_url, obj) {
var defer = $q.defer();
console.log(obj)
$http({method: 'POST',
url: api_url + obj_url + obj.id + '/',
data: obj}).
success(function (data, status, headers, config) {
defer.resolve(data);
}).error(function (data, status, headers, config) {
defer.reject(status);
});
return defer.promise;
},
});


concernsApp.controller('ProjectsCtrl', function ($scope, $http, ConcernService) {

$scope.updateTask = function(obj) {
ConcernService.update('tasks/', obj).then(function(){
...
}
});


问题在于更新任务并保持父项目不变。如果更改父项目,则一切正常。如果我使用相同的父项目,则会得到:

TypeError: Converting circular structure to JSON


我不完全确定这里发生了什么。

编辑

所以,我可以解决这样的问题:

$scope.updateTask = function(obj) {
parentProject = {'id': obj.project.id};
obj.project = parentProject;
ConcernService.update('tasks/', obj).then(function(){
...
});
};


之所以如此,是因为我实际上只需要 task.project.id来更新对象。我认为问题是由于该任务引用了一个父项目,而该子项目又引用了子任务等。我对此并不十分确定。

但是,此解决方案对我来说似乎有点棘手,我希望看到一个更好的解决方案。

最佳答案

您正在尝试将某个对象转换为JSON的某个地方,其中包含一个循环引用,这意味着:

var myObj = new Object();
myObject.reference = myObj;


现在尝试将其转换为JSON将失败,并产生错误。

查看您编辑过的帖子,您的数据结构如下所示:

task.parent -> {project}

project.tasks -> [{task1},{task2},...]


这应该为“项目有多个任务”和“任务属于一个项目”之间的关系建模。

由于循环引用,现在显然不能将其转换为json格式。

对于数据结构,为什么不选择:

project = { "id": 42,
"tasks": [123, 124, 127, ... ],
}

task = { "id": 123,
"idproject": 42,
...
}


每当需要在angularjs应用中显示关系时,都可以使用过滤器。如果要显示属于项目的内容,请按projectid过滤所有任务。

或通过请求后端针对特定项目ID的任务,从运行中的后端仅检索所需的数据。

那是做到这一点的一种方法。当然,让后端接受适当的更新请求也可以正常工作,例如更新项目将需要项目ID和一组任务ID。

关于json - angularJs TypeError:将循环结构转换为JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275455/

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