IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

ngRepeat exécuté plusieurs fois


Sujet :

AngularJS

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut ngRepeat exécuté plusieurs fois
    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:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <!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>&nbsp;<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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    '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.

  2. #2
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,

    et avec cinq menus il y a cinq répétitions ?

    Je pense que le fait de passer dans une fonction de ton scope provoque un apply du contexte et donc relance le repeat sur l'élément du contexte.
    Il faudrait essayer en utilisant une directive à la place de la fonction dans le scope.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse. Avec 4 éléments, il y a toujours 3 répétitions.
    La fonction est bien utilisé pour déterminer la classe à mettre. Dans mon exemple, c'est un console log pour montrer le problème.
    Mettre une fonction dans un ngClass est tout à fait normal. Faire une directive pour ça serait inutile.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 71
    Points
    71
    Par défaut
    Je ne pense pas qu'il l'exécute 3 fois le ngRepeat. C'est plutot testHeader qui est evalué 3 fois. Surement parce qu'il y a plusieurs niveaux de compilation (la page, ngRepeat et ngClass).
    Oui y a des bizarrerie avec Angular car tu peux passer des fonctions dans les directives. Et ces fonctions peuvent correspondent à rien, la compilation va les evaluer.

    ngClass expression
    Expression to eval. The result of the evaluation can be a string representing space delimited class names, an array, or a map of class names to boolean values. In the case of a map, the names of the properties whose values are truthy will be added as css classes to the element.

    La directive s'attend à ng-class="{maclasse: true, monautreclasse: false}"

    en général il vaut mieux passer des Expressions lorsque c'est demandé.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Résolu:

    Aucune solution !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Exécuter plusieurs fois une même requête ajout avec le même paramètre.
    Par paulojbt9 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/07/2011, 10h34
  2. scipt pour exécuter plusieurs fois un programme
    Par djocin dans le forum Linux
    Réponses: 5
    Dernier message: 02/05/2011, 04h13
  3. Fonction Ajax sur clique qui s'exécute plusieurs fois
    Par arthuro45 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 21/03/2011, 10h58
  4. Réponses: 3
    Dernier message: 28/11/2007, 15h44
  5. Sous-requête excutée plusieurs fois dans une requête
    Par sheridan31 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/07/2006, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo