我在使用Angular设置列表时遇到了这个奇怪的问题。
Error: [ngRepeat:dupes]
我要做的是从$ http获取带有$ http的api数据,并在解析它之后设置源:
var jdata = JSON.parse(data);
$scope.Items = jdata;
console.log(jdata);
以上代码产生上述错误。我试图添加track by $index
,但这会使列表出错并且我得到的XX元素没有任何意义(只有三个)。
如果我从控制台输出中获取数据并将Items设置为等于,那么它可以正常工作!
$scope.Items = [{ "Id": 1, "OrganizationId": 1,... }];
那么问题是什么呢?只有当我从服务器(ASP.NET Web API)获取数据时才会出现问题。如果我从控制台输出粘贴输出的数据并使用它...它工作得很好!
我的标记:
<div ng-repeat="item in Items">
<p>{{item.Content}}</p>
<p>{{item.State}}</p>
<button ng-click="UnCompleteItem(item.Id)">UnComplete</button>
<button ng-click="CompleteItem(item.Id)">Complete</button>
</div>
我的数据(console.log(jdata)
),3项:
[{"Id":1,"OrganizationId":1,"Content":"Item1","State":1,"CreatedBy":1,"CreatedDate":"2015-02-28T10:25:24.208783+01:00","ModifyBy":0,"ModifyDate":"0001-01-01T00:00:00","CompletedBy":0,"CompletedDate":"0001-01-01T00:00:00"},{"Id":2,"OrganizationId":1,"Content":"Item2","State":1,"CreatedBy":1,"CreatedDate":"2015-02-28T10:25:24.208783+01:00","ModifyBy":0,"ModifyDate":"0001-01-01T00:00:00","CompletedBy":0,"CompletedDate":"0001-01-01T00:00:00"},{"Id":3,"OrganizationId":1,"Content":"Item3","State":1,"CreatedBy":1,"CreatedDate":"2015-02-28T10:25:24.208783+01:00","ModifyBy":0,"ModifyDate":"0001-01-01T00:00:00","CompletedBy":0,"CompletedDate":"0001-01-01T00:00:00"}]
解决方案(????):
感谢camden_kid我“想通了”它。我不知道为什么但是从服务器2解析字符串(!!!)次来解决问题。第一次使用JSON.parse然后使用angular.fromJson:
var jdata = JSON.parse(data);
var jdata2 = angular.fromJson(jdata) // could also use JSON.parse again
$scope.Items = jdata2;
虽然console.log(jdata)看起来像上面列出的数组,但输出jdata看起来像这样:
Chrome控制台输出中的 [Object, Object, Object]
,现在可以使用!!
我现在可以使用$ http中的数据设置$ scope.Items,我也不需要track by
部分!
我对这个解决方案不满意,看起来很讨厌所以如果有人知道为什么我必须这样做,如果你能告诉我,我会很高兴:D
答案 0 :(得分:3)
JSON解析数据似乎存在问题。它返回一个字符串而不是一个对象。临时解决方案是再次解析:
var jdata = JSON.parse(jdata);