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 :

Re-exécuter un controller apres un $state.go


Sujet :

AngularJS

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut Re-exécuter un controller apres un $state.go
    Bonjour,

    Je développe une app mobile avec cordova et angularJS
    Au niveau server j'ai developpé une API REST qui me donne toutes les infos qui vont bien

    Dans mon appli angular, le user une fois loggué peut voter pour un sondage.
    Quand il arrive sur la page sondage, je fais une requete serveur qui me renvoie un json avec tous les sondages auquel il a droit et un flag "déjà voté" sur ceux auquel il a déjà répondu.
    Dans ma première vue, j'affiche la liste des sondages et quand on clique sur un sondage, dans la vue suivante j'affiche la liste des réponses possible soit sous forme "radio bouton" + un bouton "vote" s'il peut voter au sondage, soit les pourcentages de réponse et pas de bouton s'il a déjà voté.

    Quand le user vote, je fais une requete serveur avec son vote, le serveur enregistre le vote et si le serveur me renvoie success, je redirige le user sur la liste des sondages avec un "$state.go()"
    Sauf qu'il me redirige sans probleme mais ne réexécute pas le contenu du controller et donc ne recharge pas les données serveur et donc le user peut retourner sur le sondage et re-voter (même si cote serveur ça passe pas car il a déjà voté)

    Comment faire pour qu'il me réexécute le code du controller ?
    Je ne sais pas si je suis très clair....
    Merci de votre aide.
    Jérôme

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Bonjour,

    Pourrais-tu mettre le code dans lequel tu fais la redirection ($state.go) ?
    Le problème n'est pas la "ré-exécution" du contrôleur. Quand tu change d'état, le contrôleur est toujours exécuté. A moins que tu ne l'injecte pas à la déclaration de l'état.
    Et si le contrôleur n'est pas exécuté, cela voudrait dire que tu ne change pas d'état.
    Petite remarque : tu peux aussi passer des paramètres dans la fonction go.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci de ta réponse.
    Voici le code en simplifié :
    Le controller qui récupère tous les sondages sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .controller('pollsCtrl', function($scope, myConnection, storeService, LoaderService) {
        console.log('pollsCtrl ');
        var ret = myConnection.doRequest(infoConnection.username, infoConnection.password, 'polls/', LoaderService, 'GET');
        ret.success(function (response) {
            $scope.polls = response.polls;
        })
        .error(function (response, status) {
            console.log('rep ', response);
            console.log('sta ', status);
        })
    })
    Et le controller avec la fonction doVote() qui valide le vote auprès du server et renvoie sur le précédent controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    .controller('onePollCtrl', function($scope, $state, myConnection, storeService, LoaderService, $stateParams) {
        console.log('onePollCtrl ');
        $scope.doVote = function(pollSelect){
            var ret = myConnection.doRequest(infoConnection.username, infoConnection.password, 'poll/vote/', LoaderService, 'POST', {'pollanswer':pollSelect});
            ret.success(function (response) {
                $state.go('quickpolls');
            })
            .error(function (response, status) {
                console.log('rep ', response);
                console.log('sta ', status);
            })
        };
    })
    j'ai essayé avec un $state.reload, mais ça ne change rien.
    Merci.
    Jérôme

  4. #4
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Est-ce qu'en debug, il s’arrête sur l'état "quickpolls" ?
    Comment déclare-tu cet état ? et Comment injecte-tu le contrôleur ?
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    En débug, il s'arrete lors du premier passage et pas après lors de l'appel via le state.go
    Mon expérience en AngularJS est assez récente je ne suis pas sur de tout comprendre ce que tu me demandes....
    voici ma déclaration dand mon router :
    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
     
           .config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
                $stateProvider
                        // route for login
                        .state('login', {
                            url: '/login',
                            templateUrl: 'templates/login.html',
                            controller: 'loginCtrl'
                        })
     
                        // route for all polls
                        .state('quickpolls', {
                            url: '/quickpolls',
                            templateUrl: 'templates/quickpolls.html',
                            controller: 'pollsCtrl'
                        })
     
                        // route for onepoll
                        .state('onePoll', {
                            url: '/onePoll/:pollID',
                            templateUrl: 'templates/onePoll.html',
                            controller: 'onePollCtrl'
                        })
    Merci.
    Jérôme

  6. #6
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Dans ton contrôleur, le service $stateParams n'est pas utile et n'est pas non plus utilisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .controller('onePollCtrl', function($scope, $state, myConnection, storeService, LoaderService, $stateParams) {
    Ensuite, quelques urls ont des paramètres que tu n'utilises pas. Justement avec le service $stateParams.
    Ces paramètres pourraient être utilisés dans la résolution de variables que tu voudrais injecter dans ton contrôleur.

    Exemple : dans ton état


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // route for onepoll
    .state('onePoll', {
        url: '/onePoll/:pollID',
        templateUrl: 'templates/onePoll.html',
        controller: 'onePollCtrl'
        resolve: {
            poll: ['PollsService', '$stateParams', function(PollsService, $stateParams){
                                    return PollsService.getById($stateParams.pollID).then(function(res){
                                        return res.poll;
                                    });
                                }]
        }
     
    })
    et dans le contrôleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .controller('onePollCtrl', function($scope, $state, myConnection, storeService, LoaderService, poll) {
    Ce code est juste un exemple, adapte le à ton besoin.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci pour ton retour.
    Je comprends ce que tu veux dire, ça reviens à sélectionner le poll qui va bien et l'injecter dans mon controller.
    Moi pour ça j'ai développé un service de store dans lequel je stocke les infos dont je vais avoir besoin dans plusieurs controller et je vais les rechercher via un ID quand nécessaire.
    Dans mon souci c'est de recharger les infos du poll sur le server, ce que fait mon controller qui ne veut pas se réexécuter....
    Jérôme

  8. #8
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Justement,

    Si un paramètre n'est pas utilisé alors qu'il est déclaré dans l'url et si tu appelle l'état sans lui passer de paramètres, le routeur d'Angular UI bug un peu. Ce qui est normal...
    Je t'ai proposé l'injection de la variable poll car tu as un paramètre dans l'url de ton état. Mais si tu ne veux pas l'injecter, supprime justement cette injection et supprime aussi le paramètre dans l'url declarée dans ton état.
    Teste ensuite et dis nous
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

Discussions similaires

  1. Problème exécutable 1.1 après installation 2.0
    Par SaumonAgile dans le forum Framework .NET
    Réponses: 4
    Dernier message: 19/04/2007, 15h21
  2. Réponses: 9
    Dernier message: 18/10/2006, 11h18
  3. Réponses: 7
    Dernier message: 13/04/2006, 11h56
  4. [VB.NET] Création de control après ouverture du form
    Par boulete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2006, 12h06
  5. Excuter quelque chose apres l'arret des scrollbar
    Par m14w dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/01/2006, 23h52

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