ski*_*kip 21 json for-loop angularjs angularjs-ng-repeat
我从服务请求返回了以下json数据:
{
"entries": [{
"id": 2081,
"name": "BM",
"niceName": "bodmas"
}]
}, {
"id": 8029,
"name": "Mas",
"niceName": "Masm"
}]
}],
"count": 2
}
Run Code Online (Sandbox Code Playgroud)
我在html中尝试以下代码来循环遍历这些数据:
<option ng-repeat="entry in entries" value="{{entry.name}}">{{entry.name}}</option>
Run Code Online (Sandbox Code Playgroud)
运行代码时出现以下错误:
Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: entry in entries, Duplicate key: string:c
Run Code Online (Sandbox Code Playgroud)
以下是我的控制器的代码:
myApp.controller("MyController", ['$scope', '$http', '$log', function($scope, $http, $log){
...
$http.get('https://myServiceURL').success(function(data){
$scope.entries = data;
});
}]);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解为什么我会收到这个错误?
Mal*_*001 38
添加track by $index到您的ng重复,而不是:
<option ng-repeat="entry in entries" value="{{entry.name}}">{{entry.name}}</option>
Run Code Online (Sandbox Code Playgroud)
尝试:
<option ng-repeat="entry in entries track by $index" value="{{entry.name}}">{{entry.name}}</option>
Run Code Online (Sandbox Code Playgroud)
有关此错误消息的文档中有关于此的更多信息 :
在ngRepeat表达式中存在重复键时发生.禁止重复键,因为AngularJS使用键将DOM节点与项目关联.
默认情况下,集合通过引用进行键控,这对于大多数常见模型来说是理想的,但对于实际的基本类型(共享引用)可能会有问题.
Goo*_*lla 11
您的JSON无效,应该是:
{
"entries": [{
"id": 2081,
"name": "BM",
"niceName": "bodmas"
}, {
"id": 8029,
"name": "Mas",
"niceName": "Masm"
}],
"count": 2
}
Run Code Online (Sandbox Code Playgroud)
此外,请确保您正在访问正确级别的文档,使用:
$http.get('https://myServiceURL').success(function(data){
$scope.entries = data.entries;
});
Run Code Online (Sandbox Code Playgroud)
然后,它应该工作.看到这个JSBin.
如果我可以添加一个额外的原因,为什么会发生这种情况......
如果您使用JS对象[]或{}执行此操作
并且你将它传递给这样的指令
<my-directive my-attribute="{{ myObject }}"></my-directive>
Run Code Online (Sandbox Code Playgroud)
在指令中,您必须通过执行此操作将myObject变回对象
...
controller: function( $scope ){
$scope.links = $scope.$eval( $scope.myObject );
....
Run Code Online (Sandbox Code Playgroud)
然后HTML和ng-repeat将起作用
...
<span class="" ng-repeat="link in links">
...
Run Code Online (Sandbox Code Playgroud)
ngRepeat不知道如何重复单个字符串.
这是$ scope.$ eval之前对象的样子
"[{ hello: 'you' }]"
Run Code Online (Sandbox Code Playgroud)
在$ scope之后.$ eval()
[{ hello: 'you' }] an actual object to repeat over.
Run Code Online (Sandbox Code Playgroud)
错误类型使得它不能重复字符串的引用.这是我得到的错误.
错误:[ngRepeat:dupes] http://errors.angularjs.org/1.3.0-beta.8/ngRepeat/dupes?p0=link%20in%20links&p1=string%3Al
| 归档时间: |
|
| 查看次数: |
62061 次 |
| 最近记录: |