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

Angular Discussion :

Récupérer 1 valeur Firebase avec son id pour l'injecter dans le html avec {{..}}


Sujet :

Angular

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut Récupérer 1 valeur Firebase avec son id pour l'injecter dans le html avec {{..}}
    Bonjour,
    J'ai un problème pour récupérer les valeurs d'un document firebase dans une collection pour l'insérer dans le html avec la méthode {{data.nom}} par exemple.

    J'ai la collection "Etudes" et je veux récupérer 1 document de la collection avec son id (etudeid).

    J'ai la fonction :

    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
    public constructor(private db: AngularFirestore) {
     
    db.collection('etudes').doc(this.etudeid).ref.get().then(function (doc) {
          if (doc.exists) {
            console.log("ok");
            console.log(doc.data());
            console.log(doc.data().nom);
     
          } else {
            console.log("Pas de document avec cet ID!");
          }
        }).catch(function (error) {
          console.log("There was an error getting your document:", error);
        });
     
      }

    La fonction fonctionne et la console me renvoie bien le nom de l'étude en l'occurence le doc.data().nom, MAIS Impossible de binder cette valeur dans le html. Pas d'erreur mais elle n'apparait pas !
    Je m'arrache les cheveux ;-)

    Quelqu'un peut il m'aider à récupérer cette valeur dans le html svp ?
    Merci d'avance

  2. #2
    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
    d'abord, on ne récupère jamais les données dans le constructeur
    mais dans le cycle de vie ngOnInit

    constructeur() --> à l'instanciation de l'objet, la vue n'est pas créer donc on ne peut rien afficher
    ngOnInit() { --> la vue est intitialiser donc on peut y faire afficher des trucs

    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
     
    ...
        nom: string;
    ...
    ngOnInit() {
     
        db.collection('etudes').doc(this.etudeid).ref.get().then(function (doc) {
          if (doc.exists) {
            console.log("ok");
            console.log(doc.data());
            console.log(doc.data().nom);
             //
             //    le lien avec data doc.data().nom ?????
             //
             this.nom = doc.data().nom;
     
          } else {
            console.log("Pas de document avec cet ID!");
          }
        }).catch(function (error) {
          console.log("There was an error getting your document:", error);
        });
    }
    Comme la donnée est récupéré plus tard dans le temps car c'est une requête, il est bien de tester la donnée dans la vue avec *ngIf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ng-container *ngIf="nom">{{nom}}</ng-container>

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut toujours un petit problème ;-)
    Merci beaucoup, effectivement je comprends le problème et j'ai de suite testé. Cependant cela ne fonctionne toujours pas. En effet en plaçant votre code modifié, "db" n'est plus reconnu sachant qu'il est déclaré dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public constructor(private db: AngularFirestore) { ...
    Comment le faire reconnaitre dans ngOninit() svp ?

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    en dehors du constructeur, on utilise toujours: this.
    pour accèder à une variable, une fonction..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.db.collectio...........

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut
    Merci de votre réponse rapide, c'est extrement sympathique. J'ai réglé le problème du ngOnInit() mais j'ai cette erreur dans la console :


    There was an error getting your document: TypeError: Cannot set property 'nom' of undefined
    at etude-thermique-step.component.ts:71
    at ZoneDelegate.invoke (zone-evergreen.js:364)
    at Object.onInvoke (core.js:27148)
    at ZoneDelegate.invoke (zone-evergreen.js:363)
    at Zone.run (zone-evergreen.js:123)
    at zone-evergreen.js:857
    at ZoneDelegate.invokeTask (zone-evergreen.js:399)
    at Object.onInvokeTask (core.js:27136)
    at ZoneDelegate.invokeTask (zone-evergreen.js:398)
    at Zone.runTask (zone-evergreen.js:167)

    Alors que "nom" du document existe bien, ce qui est confirmé par le console.log :
    ...
    nom: "sds"
    ...

    Vous avez une idée d'où l'erreur peut venir svp ?

    Pour résumé la console affiche cette valeur correcte puis me dit :
    "TypeError: Cannot set property 'nom' of undefined...."
    et l'affichage dans le html est toujours absent.
    Merci d'avance.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    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
     
    ...
        nom: string;
    ...
    ngOnInit() {
     
        let that = this;         //  this du contexte composant
        //
        this.db.collection('etudes').doc(this.etudeid).ref.get().then(function (doc) {
          if (doc.exists) {
            console.log("ok");
            console.log(doc.data());
            console.log(doc.data().nom);
             //
    
             //   ici this.   correspond au this du context de l'observable donc ça ne va pas
             // donc on utilise that ou on a sauvergardé le this du context composant
             that.nom = doc.data().nom;
     
          } else {
            console.log("Pas de document avec cet ID!");
          }
        }).catch(function (error) {
          console.log("There was an error getting your document:", error);
        });
    }

    this. designe le context ou il se trouve
    en general c'est celui du composant
    mais parfois, comme pour un observable c'est celui de ce dernier...

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut
    MERCI INFINIMENT ! ÇA MARCHE !!!

Discussions similaires

  1. [XL-2003] Récupérer une valeur calculée sur un sheet pour le renvoyer dans une listbox
    Par Thierry2B dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/01/2011, 09h55
  2. Récupérer une valeur introduite avec inputdlg
    Par larimoise dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 21/07/2009, 22h05
  3. [MySQL] comment récupérer une valeur booleenne d'un formulaire pour implémenter sous mysql
    Par ben.IT dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2009, 07h54
  4. Réponses: 3
    Dernier message: 07/10/2008, 11h13
  5. Réponses: 4
    Dernier message: 03/05/2007, 20h27

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