首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ng-repeat上“不允许在中继器中复制”

在ng-repeat上“不允许在中继器中复制”
EN

Stack Overflow用户
提问于 2014-07-27 09:32:27
回答 4查看 64K关注 0票数 21

我从一个服务请求中返回了以下json数据:

代码语言:javascript
复制
{
    "entries": [{
        "id": 2081,
        "name": "BM",
        "niceName": "bodmas"
        }]
    }, {
        "id": 8029,
        "name": "Mas",
        "niceName": "Masm"
        }]
    }],
    "count": 2
}

我尝试使用html中的以下代码来遍历这些数据:

代码语言:javascript
复制
<option ng-repeat="entry in entries" value="{{entry.name}}">{{entry.name}}</option>

当我运行代码时,我得到了以下错误:

代码语言:javascript
复制
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

下面是我的控制器的代码:

代码语言:javascript
复制
myApp.controller("MyController", ['$scope', '$http', '$log', function($scope, $http, $log){
       ...

       $http.get('https://myServiceURL').success(function(data){
                    $scope.entries = data;
        });
}]);

有人能帮我理解为什么我会得到这个错误吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-27 09:47:47

您的JSON无效,应为:

代码语言:javascript
复制
{
    "entries": [{
        "id": 2081,
        "name": "BM",
        "niceName": "bodmas"
    }, {
        "id": 8029,
        "name": "Mas",
        "niceName": "Masm"
    }],
    "count": 2
}

此外,请确保您以正确的级别访问文档,请使用:

代码语言:javascript
复制
$http.get('https://myServiceURL').success(function(data){
    $scope.entries = data.entries;
});

那么,它应该是可行的。请参阅此JSBin

票数 11
EN

Stack Overflow用户

发布于 2014-07-27 10:06:25

看起来您的作用域中的数据结构有问题。您的示例JSON显示了一个具有entries属性和count属性的对象。然后将整个对象作为entries放入您的作用域中。这意味着您需要以entries.entries的形式访问这些条目,并以entries.count为单位进行计数。也许这个控制器更接近你想要的:

代码语言:javascript
复制
myApp.controller("MyController", ['$scope', '$http', '$log', function($scope, $http, $log){
    ...

    $http.get('https://myServiceURL').success(function(data){
        $scope.entries = data.entries;
        $scope.count = data.count;
    });
}]);
票数 1
EN

Stack Overflow用户

发布于 2016-06-10 13:16:03

不允许在ng重复中出现重复项。示例

代码语言:javascript
复制
    <!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="angular.js"></script>

</head>
<body>
    <div ng-app="myApp" ng-controller="personController">
        <table>
            <tr> <th>First Name</th> <th>Last Name</th> </tr>
            <tr ng-repeat="person in people track by $index">
                <td>{{person.firstName}}</td>
                <td>{{person.lastName}}</td>
                <td><input type="button" value="Select" ng-click="showDetails($index)" /></td>
            </tr>

        </table> <hr />
        <table>
            <tr ng-repeat="person1 in items track by $index">
                <td>{{person1.firstName}}</td>
                <td>{{person1.lastName}}</td>
            </tr>
        </table>
        <span>   {{sayHello()}}</span>
    </div>
    <script> var myApp = angular.module("myApp", []);
        myApp.controller("personController", ['$scope', function ($scope)
        { 
            $scope.people = [{ firstName: "F1", lastName: "L1" },
                { firstName: "F2", lastName: "L2" }, 
                { firstName: "F3", lastName: "L3" }, 
                { firstName: "F4", lastName: "L4" }, 
                { firstName: "F5", lastName: "L5" }]
            $scope.items = [];
            $scope.selectedPerson = $scope.people[0];
            $scope.showDetails = function (ind) 
            { 
                $scope.selectedPerson = $scope.people[ind];
                $scope.items.push($scope.selectedPerson);
            }
            $scope.sayHello = function ()
            {
                return $scope.items.firstName;
            }
        }]) </script>
</body>
</html>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24977103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档