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

Vue hybride

dukoid AngularJS : requête $http(API... 31/08/2016, 16h48
Marco46 Met un console.log dans ton... 01/09/2016, 13h44
dukoid marco46, c'est le cas. ... 01/09/2016, 16h52
Marco46 Fais voir la description... 01/09/2016, 17h25
Marco46 Ah ben sur ton 1er post on le... 01/09/2016, 17h26
dukoid aah d'accord, ça marche merci... 01/09/2016, 17h37
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    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
    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 confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

  3. #3
    Membre extrêmement actif
    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
    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 confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

  6. #6
    Membre extrêmement actif
    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
    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, 16h30
  2. Réponses: 3
    Dernier message: 27/01/2007, 09h11
  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, 08h30
  4. Requête qui fonctionne 1 fois sur 100
    Par nicotine002 dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 11h42
  5. requète double en 1 fois
    Par Yoshio dans le forum Débuter
    Réponses: 10
    Dernier message: 15/01/2006, 23h37

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