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 :

AngularJS : requête $http(API REST) fait 2 fois de suite...


Sujet :

AngularJS

  1. #1
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut AngularJS : requête $http(API REST) fait 2 fois de suite...
    bonjour les amis,

    j'ai un soucis, à chaque changement de page, ma requête à l'API REST est effectuée 2 fois même parfois 3 fois.

    j'ai 3 pages, à chaque page je fais une requête API REST via $http dans une factory pour récupérer des données.
    chaque controller fait donc appelle à cette factory et passe les données à la vue.

    la factory Product:
    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
    'use strict';
    
    angular.module('starter')
    .factory('Product', function($http) {
        Product.products = [];
        
        Product.getAll = function() {
            return $http.get('http://apirest-xxxxxxxx/api/v1/produits')                      // FAIT 2 fois 
                .success(function(data) {
                    Product.products = data;
                });
        };
    
        ...
        
        return Product;
    });

    mon controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'use strict';
    
    starter.controller('ProductShowAllController', function($scope, Product) {
        this.products = Product.products;
    
        Product.getAll()
            .then(function() {
                this.products = Product.products;   
    console.log(this.products);                                             //             
            }.bind(this));
    
        ...

    app.js avec les routes :
    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
     
    var starter = angular.module('starter', ['ngRoute']);
     
    starter.config(['$routeProvider',
        function($routeProvider) {
            $routeProvider.
     
            when('/home', {
                templateUrl: 'views/home.html',
                controller: 'HomeController'
            }).
     
            when('/produits', {
                templateUrl: 'views/produits.html',
                controller: 'ProductShowAllController'
            }).
     
           ....


    via firebug, je regarde donc le reseau et je vois à chaque changement de page; 2 fois la même requête effectuée.
    et console.log(this.products); est exécuté 2 fois, j'ai 2 lignes

    une idée ?

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 608
    Points
    19 608
    Par défaut
    Met un console.log dans ton contrôleur pour voir s'il serait pas exécuté 2 fois par hasard.

    A mon avis la solution se trouve dans la structure html de ta page.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    marco46, c'est le cas.

    voici l'affichage des produits
    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
    26
    27
    28
    29
    30
    31
    32
     
        <div ng-controller="ProductShowAllController as Product">
     
            <div class="row" ng-show="Product.products.length > 1">
                <div class="col-md-7"></div>
                <div class="col-md-5">
                    <a ng-click="clickPredicateName()" class="col-md-5">Trier par nom</a>
                    <a ng-click="clickPredicatePrice()" class="col-md-5"> Trier par prix</a>
                </div>
                <div class="col-md-12" style="height: 8px;"></div>
            </div>
     
            <a href="#" class="list-group-item active">
                Tous les produits
            </a>
            <div class="list-group">
            <div ng-repeat="product in Product.products | orderBy: orderByPredicate : orderByReverse">
                <a class="list-group-item" href="#/detail/{{product.id}}">
                    <div class="row">
                        <div class="offset-md-2 col-md-4">
                            <img src="img/produits/tn_{{ product.image}}.jpg" />
                        </div>
                        <div class="col-md-12 categorie">
                            {{ product.categorie.nom }}
                        </div>
    ...
                    </div>
                </a>
            </div>
     
        </div>
        </div>
    je ne vois pas le soucis ?

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 608
    Points
    19 608
    Par défaut
    Fais voir la description javascript de ta route. Ya des chances que tu déclares le contrôleur dans le html (ng-controller) et dans la route, ce qui fait qu'il serait instancié 2 fois.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 608
    Points
    19 608
    Par défaut
    Ah ben sur ton 1er post on le voit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    when('/produits', {
                templateUrl: 'views/produits.html',
                controller: 'ProductShowAllController'
            }).
    Il te faut en virer un des deux.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  6. #6
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    aah d'accord, ça marche merci

    j'ai donc viré la declaration du controller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    when('/produits', {
                templateUrl: 'views/produits.html'
            }).
    je me crois sur Symfony ou il s'agit que d'une déclaration.
    là il exécute le controller donc.



    merci marco , tu assures !

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

Discussions similaires

  1. [Requete] Erreur pour une requête créée en plusieurs fois
    Par soforever dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/05/2007, 17h30
  2. Réponses: 3
    Dernier message: 27/01/2007, 10h11
  3. Requête qui fait une somme par ligne
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/08/2006, 09h30
  4. Requête qui fonctionne 1 fois sur 100
    Par nicotine002 dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 12h42
  5. requète double en 1 fois
    Par Yoshio dans le forum Débuter
    Réponses: 10
    Dernier message: 16/01/2006, 00h37

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