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 :

Accès au $scope après un get


Sujet :

AngularJS

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut Accès au $scope après un get
    Bonjour,

    Je travaille actuellement sous Angular v1.3.15 et je suis nouveau sur ce type de langage.
    Je souhaite récupérer les données d'un Fichier JSON, modifier une variable du $scope avec les données récupérées dans le JSON.
    Et accèder à cette variable plus loin dans mon controller.

    Voici 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    app.controller('MainCtl', ['config', '$scope', '$http', function(config, $scope, $http) {
     
        var file = config.fileUrl;
     
        // Extract a list of current releases
        $http.get(file).success( function(data) {
                var releaseList=[];
    	    for(i=0; i < data.length; i++)
    	    {
                    var st = data[i];
                    for(j=0; j < st.Releases.length; j++)
                    {
                	    releaseList = releaseList.concat(st.Releases[j].Release);
                    }
    	    }
                // Remove duplicate elements from the list
    	    $scope.releaseList = Array.from(new Set(releaseList));
    	    $scope.selectedRelease = $scope.releaseList[0]; // Select first element
        });
     
        console.log("Selected Release : " + $scope.selectedRelease);
     
    }]);
    Mais la variable $scope.selectedRelease vaut "undefined".
    Comment fait t'on pour récupérer la variable settée lors du get?

    Est ce que cela est dû à un appel asynchrone au niveau du get?

    Merci d'avance pour votre aide.

  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
    Oui ta variable est créée lors de la résolution de la promesse, bien après avoir été lue par AngularJS pour être publiée dans la vue.

    Quelques remarques :

    - ta version de AngularJS est obsolète, il faut mettre à jour.
    - il est fortement conseillé de suivre le styleguide de John Papa.
    - il est fortement conseillé de ne pas écrire de logique dans les controllers et de déléguer à des services
    - il est fortement conseillé de bind un literal englobant tout dans la vue plutôt que chaque variable à publier, par ex dans ton cas :

    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
     
    app.controller('MainCtl', ['config', '$scope', '$http', function(config, $scope, $http) {
     
        var file = config.fileUrl;
        $scope.data = {
            releaseList: null,
            selectedRelease: null
        };
     
        // Extract a list of current releases
        $http.get(file).success( function(data) {
                var releaseList=[];
    	    for(i=0; i < data.length; i++)
    	    {
                    var st = data[i];
                    for(j=0; j < st.Releases.length; j++)
                    {
                	    releaseList = releaseList.concat(st.Releases[j].Release);
                    }
    	    }
                // Remove duplicate elements from the list
    	    $scope.data.releaseList = Array.from(new Set(releaseList));
    	    $scope.data.selectedRelease = $scope.releaseList[0]; // Select first element
        });
     
        console.log("Selected Release : " + $scope.selectedRelease);
     
    }]);
    Au passage pour quoi faire Array.from(new Set(releaseList)) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Salut et merci pour tous ces conseilles.

    Oui ta variable est créée lors de la résolution de la promesse, bien après avoir été lue par AngularJS pour être publiée dans la vue.
    Si j'ai bien compris, je peux utiliser les promises comme expliqué dans le lien suivant:
    http://haroldrv.com/2015/02/understa...-and-promises/

    - ta version de AngularJS est obsolète, il faut mettre à jour.
    Effectivement ma version d'Angular est obsolète mais je récupère un projet et je compte bien la mettre à jours

    - il est fortement conseillé de ne pas écrire de logique dans les controllers et de déléguer à des services
    Effectivement, je pense que c'est là mon principal problème.

    Au passage pour quoi faire Array.from(new Set(releaseList)) ?
    Pour virer les doublons dans la variable "releaseList".

Discussions similaires

  1. accès à une image après vérification par php
    Par sakini dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2007, 21h38
  2. probleme d'accès au menu après sa modification
    Par racha dans le forum Forms
    Réponses: 6
    Dernier message: 26/02/2007, 16h38
  3. Retrouver Opener apres POST/GET dans PopUp
    Par rgomes dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/02/2007, 17h31
  4. Réponses: 6
    Dernier message: 09/02/2006, 12h33
  5. acces au HTML apres innerHTML
    Par jeff_! dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/12/2005, 16h38

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