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 :

Afficher des données provenant d'une BD mongoDb


Sujet :

AngularJS

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Afficher des données provenant d'une BD mongoDb
    bonjour,
    étant débutant sur angular, je peine à vouloir afficher des données d'une base de données mongoDb en REST, dans des pages web.
    côté back, j'ai utilisé node.js (pas de souçis).
    un message d'erreur s'affiche : TypeError: Cannot read property '0' of undefined
    pourtant, j'ai suivi la procédure en me renseignant sur des sites.
    j'ai essayé de plusieurs manières.
    si quelqu'un veut bien m'aider à résoudre ce problème ? merci bien.

    voici le code :


    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
    /*MongoDb => http://localhost:3000/skills (l'url fonctionne bien)*/
    {
    "skills": [
    {
    "_id": "5196666ae4b0988ed5cc4391",
    "title": "Compétences techniques",
    "items": [
    {
    "subtitle": "Langages",
    "item": "JAVASCRIPT, AJAX, JSON, HTML5, CSS3, XML, PHP, SQL, SHELL",
    "display": "1"
    },
    {
    "subtitle": "Javascript client-side",
    "item": "JQUERY, BACKBONE (notions), EMBERJS (notions)",
    "display": "1"
    }
    ...
    ]
    }
    ]
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*app.js*/
    'use strict';
    angular.module( 'myApp', [
    'ngRoute',
    'myApp.filters',
    'myApp.services',
    'myApp.directives',
    'myApp.controllers'
    ])
    .config(['$routeProvider', function( $routeProvider) {
    $routeProvider.when( '/home', {templateUrl: 'app/partials/home.html', controller: 'HomeController'});
    $routeProvider.when( '/skills', {templateUrl: 'app/partials/skills.html', controller: 'SkillController'});
    $routeProvider.otherwise({ redirectTo: '/home' });
    }]);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /*service.js*/
    'use strict';
    angular.module( 'myApp.services', ['ngResource'])
    .factory( 'SkillsService', [ '$resource', function( $resource) {
    return $resource( '/skills', {}, {
    query : { method:'GET', isArray : true },
    get : { method:'GET' }
    });
    }]);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /*controller.js*/
    angular.module( 'myApp.controllers', [])
    .controller( 'HomeController', [function() {
     
    }])
    .controller( 'SkillsController', [ '$scope', 'SkillsService', function( $scope, SkillsService) {
    var skillsBase = SkillsService.query().skills[0];
    $scope.skills = skillsBase.items;
    }]);


    Code html : 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
    <!--index.html-->
    <!doctype html>
    <html lang="fr" xmlns:ng="http://angularjs.org" ng-app="myApp" id="ng-app">
    ...
    <body>
    <div class="container" ng-view></div>
    ...
    <script src="app/lib/jquery/jquery-2.0.3.min.js"></script>
    <script src="app/lib/bootstrap/bootstrap.min.js"></script>
    <script src="app/lib/angular/angular.js"></script>
    <script src="app/lib/angular/angular-route.js"></script>
    <script src="app/lib/angular/angular-resource.js"></script>
    <script src="app/js/app.js"></script>
    <script src="app/js/services.js"></script>
    <script src="app/js/controllers.js"></script>
    <script src="app/js/filters.js"></script>
    <script src="app/js/directives.js"></script>
    ...
    </body>
    </html>


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!--home.html-->
    <div ng-controller="SkillsController">
    <div ng-repeat="skill in skills">{{skill.item}}</div>
    </div>
    <div ng-include data-src="'app/partials/skills.html'"></div>
    <!--si je supprime ng-controller="SkillsController",
    il n'y a plus de messages d'erreurs mais aucune donnée ne s'affiche.-->


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!--skills.html-->
    <div>
    <div ng-repeat="skill in skills">{{skill.item}}</div>
    </div>

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 71
    Points
    71
    Par défaut
    Quand tu fais
    SkillsService.query()
    il y un appel asynchrone vers MongoDB. Ca prend un certain temps pour la machine.
    Pendant ce temps très court, le controlleur lit immédiatement l'index 0.
    A ce moment de l'execution il n'y a encore rien dans ton "skills". La donnée va se remplir seulement apres la requete base de donnée.

    L'interêt de $resource est que tu n'a pas coder ce traitement de retour.
    Une idée est de "data-bind" directement la reponse donc remplacer

    var skillsBase = SkillsService.query().skills[0]
    par

    $scope.skillsBase = SkillsService.query()
    dans le HTML faire une double boucle:
    si l'objet contient 0 element Angular commentera la directive
    ensuite il affichera le contenu du tableau -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <div ng-repeat="skills in skillBase">
           <div ng-repeat="skill in skills">{{skill.item}}</div>
    </div>

Discussions similaires

  1. Afficher des données dans d'une gridView
    Par loubna_drime dans le forum ASP.NET
    Réponses: 4
    Dernier message: 17/05/2009, 14h42
  2. afficher des données sessions dans une jsp avec taglib
    Par psgman113 dans le forum Struts 1
    Réponses: 5
    Dernier message: 13/10/2008, 10h14
  3. [MySQL] afficher des données à partir d'une date selectionnée
    Par rane dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/11/2007, 15h21
  4. [MySQL] afficher des données binaires d'une table mysql dans un tableau
    Par piscop dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/06/2007, 14h48
  5. Réponses: 2
    Dernier message: 14/05/2007, 09h40

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