je rencontre depuis quelque jours un bug bizzare avec angular et je n'arrive pas a definir ce que c'est, je penche pour une mauvaise utilisation du framework.

a chaque rafraichissement des données de mes tableaux, j'ai l'espaces d'une seconde, mes donnée en double et apres plus rien. cela ne me fait ca que sur les tableaux, quelqu'un a deja eu ce genre de bug chiant?

a oui aussi, pourquoi je recoit 2 objets quand je tape mon api? je recoit en double mes donnée du server, j'ai verifier mon server me renvoie bien qu'un seul json.

9 réponses


Maenhyr
Réponse acceptée

Ca depend de ton besoin. Si c'est juste retirer la ligne, une suppression de ton element dans le tableau que tu affiches le fera disparaitre. Si tu as besoin de faire un appel serveur pour recuperer des informations apres la suppression, alors un appel a un service aura plus de sens.

Maenhyr
Réponse acceptée

Il faut que tu mettes ton array services dans la methode initActivity(). Une promise ne peut etre resolue qu'une seule fois. Mettre le tableau dans la methode va en fait te permettre de creer de nouvelle promises.

        function initActivity() {
        var services = [
            saisonServices.getSaison(),
            tarifServices.getTarif(),
            busServices.getBus(),
            certifServices.getCertif(),
            typeServices.getTypeEvent()
        ];
            $q.all(services)
                .then(function (data) {
                    $scope.Saison = data[0].data.data;
                    $scope.Tarif  = data[1].data.data;
                    $scope.Bus    = data[2].data.data;
                    $scope.Certif = data[3].data.data;
                    $scope.Type   = data[4].data.data;
                });

        }

sans code ca va etre dur a repondre. Je dirais que tu as peut etre un probleme de $digest dans ton code.

Pour le point 2 ( les deux objets), peux tu etre plus precis ?

Defy
Auteur

quand je recoit ma donnée de mon appel ajax quand je fait mon console.log pour voir si j'obtiens bien mes data je me retourve avec ca.

[Object-Object]
[Object-Object]

ces deux tableaux comporte exactement les meme data les meme infos

édit: je viens de vérifier avec mon server, a chaque refresh de mon app angular, mon service envoie bien 2 demande a mon url en get

GET /bus/ 304 2.736 ms - -
GET /bus/ 304 2.503 ms - -

edit: pour le code le voici


        var services = [
            saisonServices.getSaison(),
            tarifServices.getTarif(),
            busServices.getBus(),
            certifServices.getCertif(),
            typeServices.getTypeEvent()
        ];

        function initActivity() {
            $q.all(services)
                .then(function (data) {
                    $scope.Saison = data[0].data.data;
                    $scope.Tarif  = data[1].data.data;
                    $scope.Bus    = data[2].data.data;
                    $scope.Certif = data[3].data.data;
                    $scope.Type   = data[4].data.data;
                });

        }

  initActivity();

Comme ca je ne vois pas de souci dans le code. Tu as peut etre un watcher qui appelle ce meme code une deuxieme fois.

Defy
Auteur

j'avait un appel de cette fonction dans mon delete qui me servais de refresh des datas mais meme supprimé j'ai toujours le meme problème et toujours les 2 appel en base de donnée.

tu me conseil quoi comme bonne pratique angular pour refresh des data apres une action sur un bouton, comme par exemple un delete d'info dans un tableau

Defy
Auteur

ben en faite, la suppression se fait, mais le refresh non, depuis que je suis passer par $q pour promisifier mes appel http la fonction ne reload plus les datas apres une suppréssion, meme si j'appel la fonction d'initialisation.

Defy
Auteur

Ok, je test ca quand je suis de retour sur mon code. Merci pour ton aide en tous prbaron :-)

edit: tous est bon pour le del c'est cool merci :-) ( j'avait pas pensé a faire ça le noob... ) parcontre, je ne comprend pas pourquoi j'ai 2 appel ajax a chaque foi, peut être cela vient de mon service en lui meme pourtant il est pas très folichons je doit dire

    .service('activityServices', function ($http) {

        var baseUrl = "http://localhost:3000/act/";
        var update  = "http://localhost:3000/act_update/";

        this.getActivity = function () {
            return $http.get(baseUrl);
        };

        this.getOneActivity = function (id) {
          return $http.get(baseUrl + id);
        };

        this.postActivity = function (data) {
            return $http.post(baseUrl, data);
        };

    });
Defy
Auteur

Resolution du problème de double data au refresh en promissifiant mes services, ca marche nickel, merci pour toute les aides sur tous mes sujet angular prbaron ca ma bien fait évoluer dan la comprehension du framework :-)