Question Erreur de répétition angulaire "Les doublons dans un répéteur ne sont pas autorisés."


Je définis un filtre personnalisé comme ça:

<div class="idea item" ng-repeat="item in items" isoatom>    
    <div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
        ....
    </div>
</div>

Comme vous pouvez le voir, le ng-repeat où le filtre est utilisé est imbriqué dans un autre ng-repeat

Le filtre est défini comme ceci:

myapp.filter('range', function() {
    return function(input, min, max) {
        min = parseInt(min); //Make string input int
        max = parseInt(max);
        for (var i=min; i<max; i++)
            input.push(i);
        return input;
    };
});

Je suis en train:

Erreur: les doublons dans un répéteur ne sont pas autorisés. Répéteur: commenter dans item.comments | gamme: 1: 2 ngRepeatAction @https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an


438
2018-04-30 09:37


origine


Réponses:


La solution est en fait décrite ici: http://www.anujgakhar.com/2013/06/15/duplicates-in-a-repeater-are-not-allowed-in-angularjs/

AngularJS n'autorise pas les doublons dans une directive ng-repeat. Cela signifie que si vous essayez de faire ce qui suit, vous obtiendrez une erreur.

// This code throws the error "Duplicates in a repeater are not allowed.
// Repeater: row in [1,1,1] key: number:1"
<div ng-repeat="row in [1,1,1]">

Cependant, si vous modifiez légèrement le code ci-dessus pour définir un index afin de déterminer son caractère unique, vous pourrez le faire fonctionner à nouveau.

// This will work
<div ng-repeat="row in [1,1,1] track by $index">

Les documents officiels sont ici: https://docs.angularjs.org/error/ngRepeat/dupes


889
2018-06-22 01:34



Pour ceux qui attendent JSON et reçoivent toujours la même erreur, assurez-vous d’analyser vos données:

$scope.customers = JSON.parse(data)

41
2018-02-25 21:32



J'avais un problème dans mon projet où j'utilisais ng-repeat track by $ index mais les produits ne reflétaient pas quand les données venaient de la base de données. Mon code est comme ci-dessous:

<div ng-repeat="product in productList.productList track by $index">
  <product info="product"></product>
 </div>

Dans le code ci-dessus, le produit est une directive distincte pour afficher le produit. Mais j'ai appris que $ index cause des problèmes lorsque nous transmettons des données de la portée. Les pertes de données et DOM ne peuvent donc pas être mises à jour.

J'ai trouvé la solution en utilisant product.id comme clé dans ng-repeat comme ci-dessous:

<div ng-repeat="product in productList.productList track by product.id">
  <product info="product"></product>
 </div>

Mais le code ci-dessus échoue à nouveau et renvoie l'erreur ci-dessous lorsque plus d'un produit est livré avec le même identifiant:

angular.js: 11706 Erreur: [ngRepeat: dupes] Les doublons dans un répéteur ne sont pas autorisés. Utilisez l'expression "suivi par" pour spécifier des clés uniques. Répétiteur

Donc, finalement, j'ai résolu le problème en créant une clé unique dynamique de ng-repeat comme ci-dessous:

<div ng-repeat="product in productList.productList track by (product.id + $index)">
  <product info="product"></product>
 </div>

Cela a résolu mon problème et j'espère que cela vous aidera à l'avenir.


9
2018-05-05 07:32



Que voulez-vous faire de votre filtre "range"?

Voici un exemple de travail de ce que je pense vous essayez de faire: http://jsfiddle.net/evictor/hz4Ep/

HTML:

<div ng-app="manyminds" ng-controller="MainCtrl">
  <div class="idea item" ng-repeat="item in items" isoatom>    
    Item {{$index}}
    <div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
      Comment {{$index}}
      {{comment}}
    </div>
  </div>
</div>

JS:

angular.module('manyminds', [], function() {}).filter('range', function() {
    return function(input, min, max) {
        var range = [];
        min = parseInt(min); //Make string input int
        max = parseInt(max);
        for (var i=min; i<=max; i++)
            input[i] && range.push(input[i]);
        return range;
    };
});

function MainCtrl($scope)
{
    $scope.items = [
        {
            comments: [
                'comment 0 in item 0',
                'comment 1 in item 0'
            ]
        },
        {
            comments: [
                'comment 0 in item 1',
                'comment 1 in item 1',
                'comment 2 in item 1',
                'comment 3 in item 1'
            ]
        }
    ];
}

4
2018-04-30 09:54



Si par hasard cette erreur se produit lorsque vous travaillez avec SharePoint 2010: Renommez vos extensions de fichier .json et assurez-vous de mettre à jour votre chemin restService. Aucun "track by $ index" supplémentaire n'était requis.

Heureusement, j'ai été envoyé ce lien à cette raison:

.json devient un type de fichier important dans SP2010. SP2010 inclut certains points de terminaison de service Web. L'emplacement de ces fichiers est 14hive \ isapi dossier. L'extension de ces fichiers est .json. C'est la raison pour laquelle il donne une telle erreur.

"se soucie seulement que le contenu d'un fichier json est json - pas son extension de fichier"

Une fois les extensions de fichiers modifiées, elles doivent toutes être définies. 


1
2017-10-29 16:28



Juste au cas où cela arriverait à quelqu'un d'autre, je documente ceci ici, j'obtenais cette erreur parce que j'ai incorrectement mis le modèle ng le même que le tableau ng-repeat:

 <select ng-model="list_views">
     <option ng-selected="{{view == config.list_view}}"
         ng-repeat="view in list_views"
         value="{{view}}">
         {{view}}
     </option>
 </select>

Au lieu de:

<select ng-model="config.list_view">
     <option ng-selected="{{view == config.list_view}}"
         ng-repeat="view in list_views"
         value="{{view}}">
         {{view}}
     </option>
 </select>

J'ai vérifié le tableau et n'ai pas de doublons, il suffit de vérifier vos variables.


0
2017-11-18 16:11



Les doublons dans un répéteur ne sont pas autorisés. Utilisez l'expression "suivi par" pour spécifier des clés uniques.

Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}

Exemple

<!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>

0
2018-06-10 05:09



essaye ça

$http({
        method: 'GET',
        url: url,   // your remote url
        responseType: "json"
    }).
     then(function successCallback(response) {
         //your code when success
    }, function errorCallback(response) {
        //your code when fails
    });

0
2018-02-10 12:57



Si vous appelez ng-repeat dans une balise <ul>, vous pouvez autoriser les doublons. Voir ce lien pour référence. Voir Todo2.html


0
2018-01-10 11:28



ma JSON la réponse était comme ceci:

{"items": 
  &nbsp;[
    &nbsp;&nbsp;{
      "index": 1,
      "name": "Samantha",
      "rarity": "Scarborough",
      "email": "maureen@sykes.mk"
    },
    &nbsp;&nbsp;{
      "index": 2,
      "name": "Amanda",
      "rarity": "Vick",
      "email": "jessica@livingston.mv"
    }]
}

Donc, j'ai utilisé ng-repeat = "item in variables.items"  pour l'afficher.


-1
2017-12-29 04:53



Les doublons dans un répéteur ne sont pas autorisés. Utilisez l'expression "suivi par" pour spécifier des clés uniques. Répéteur: sdetail dans mydt, Clé dupliquée: string:, Duplicate value:

J'ai fait face à cette erreur parce que j'avais mal écrit nom de la base de données dans ma partie phi api ......

Cette erreur peut également se produire lorsque vous extrayez les données de la base de données, dont le nom est incorrect.


-1
2018-06-22 12:10