Bonjour,

Je suis tombé par hasard sur une bizarrerie dans angularjs. J'ai un ngRepeat qui semble s'exécuter plusieurs fois.

ma page html:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=yes" />
        <title>mon site</title>
        <link rel="stylesheet" href="css/app.css">
    </head>
    <body ng-app="app" ng-controller="GeneralCtrl">
        <header>
            <nav>
                <ul>
                    <li ng-repeat="menu in menus" ng-class=testHeader($index)>
                        <button type="button" class="btn">
                            <span class="{{menu.classImage}} img"></span> <span class="">{{menu.texte}}</span>
                        </button>
                    </li>
                </ul>
            </nav>
        </header>

        <!-- Angular -->
        <script src="lib/angular/angular.min.js"></script>
        <!-- Application -->
        <script src="js/app.js"></script>
    </body>
</html>

mon js:

'use strict';

var app = angular.module('app', ]);
/*
 * Routes configuration
 */
app
.controller('GeneralCtrl', function($scope) {
    $scope.menus = 
        {
        "classImage": "img1",
            "texte": "1",
        },
        {
            "classImage": "img2",
            "texte": "2",
        },
        {
            "classImage": "img3",
            "texte": "3",
        }
    ];

    $scope.testHeader = function(index) {
        console.log("index " + index);
    };
});

J'ai fait une page très simple pour chercher le problème.

J'ai bien un seul menu dans ma page, mais le résultat dans la console me donne:

index 0
index 1
index 2
index 0
index 1
index 2
index 0
index 1
index 2

Donc 3 répétitions.

Merci pour votre aide.

4 réponses


ras92
Auteur
Réponse acceptée

Résolu:

Aucune solution !

Salut, en fait quand tu console log ton index, tu n'affiches pas une copie mais un référence. Ta fonction testHeader() va être appelée pour chaque élément de ta liste à chaque fois qu'il lance un ng-repeat. Vu que tu as 3 éléments dans ta liste, il va afficher 3x3 la console.

ras92
Auteur

Merci pour la réponse. Cependant, avec 4 éléments, il y a toujours 3 répétitions. Tu peux faire le test

Tu as une erreur ici :

ng-class=testHeader($index)

Ca doit être :

ng-class="testHeader($index)"

Mais en effet, je n'ai que 3x aussi. C'est ... intriguant.