angularjs – angularTypeError:将循环结构转换为JSON

前端之家收集整理的这篇文章主要介绍了angularjs – angularTypeError:将循环结构转换为JSON前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,我有一个小角度的应用如下所示: @H_404_1@// 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,config) { defer.reject(status); }); return defer.promise; },}); concernsApp.controller('ProjectsCtrl',function ($scope,$http,ConcernService) { $scope.updateTask = function(obj) { ConcernService.update('tasks/',obj).then(function(){ ... } });

问题在于更新任务并保留父项目.如果我改变了父项目,这一切都很好.如果我使用相同的父项目,那么我得到:

@H_404_1@TypeError: Converting circular structure to JSON

我不完全确定这里发生了什么.任何帮助将不胜感激.

编辑

所以我可以解决这个问题:

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

这样做是因为我只需要task.project.id来更新对象.我认为这个问题是由于这个事实引用了一个父项目,反过来又引用了孩子任务等等.我并不完全相信这个艰巨的任务.

但是,这个解决方案似乎对我来说有点黑客,我很乐意看到一个更好的解决方案.

在某处你试图将一个对象转换成JSON,并且它有一个循环引用,这意味着这样: @H_404_1@var myObj = new Object(); myObject.reference = myObj;

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

看你编辑的帖子,你的数据结构是这样的:

@H_404_1@task.parent -> {project} project.tasks -> [{task1},{task2},...]

这应该是建立关系“项目有多个任务”和“任务属于一个项目”的关系.

现在这显然不能转换成json格式,由于循环引用.

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

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

每当你必须在你的角色应用程序中显示关系时,你可以使用过滤器.如果要显示属于某个项目的内容,请使用projectid过滤所有任务.

或者通过请求后端具有的特定项目ID的任务,即时从您的后台检索所需的数据.

这是一种方法.当然,使后台接受适当的更新请求也将是正常的,例如.更新项目将需要项目ID和一系列任务ID.

原文链接:https://www.f2er.com/angularjs/140803.html

猜你在找的Angularjs相关文章