2017-08-30 1 views
2

J'utilise Vue.js avec Chart.js afin de récupérer certaines données de Firebase et de les afficher sur un graphique. Voici mon code:Remplir dynamiquement tableau avec Firebase Data Vue.js

import {Line} from 'vue-chartjs' 

let Firebase = require('firebase'); 
// 
let config = { 
    apiKey: '****************************', 
    authDomain: '****************************', 
    databaseURL: '****************************', 
    storageBucket: '****************************' 
}; 

let firebaseApp = Firebase.initializeApp(config); 
let db = firebaseApp.database(); 
let schools = db.ref('schools'); 

export default Line.extend({ 
    firebase: { 
     schoolsArray: schools 
    }, 
    data(){ 
     alert('data'); 
     return { 
      names: [] 
     } 
    }, 
    computed: { 
     schoolNames: function() { 
      for (let item of this.schoolsArray) { 
       this.names.push(item.name); 
      } 
      alert('computed'); 
      return this.names 
     } 
    }, 

    mounted() { 
     alert('mounted'); 
     this.renderChart({ 
      labels: this.names.toString(), 
      datasets: [{ 
       label: 'School Reports', backgroundColor: '#dd4935', 
       data: [10, 20, 50, 12, 34, 43, 45] 
      }] 
     }, {responsive: true, maintainAspectRatio: true}) 
    } 
}) 

Le problème est que les noms tableau sont toujours vides et les étiquettes ne sont pas affichés. Voici à quoi il ressemble: enter image description here

J'ai besoin d'afficher les noms des écoles sur l'axe x !

Sur l'image ci-dessous est le résultat du débogueur Vue.js: enter image description here

Répondre

1

db.ref('school') retourne un objet « firebase.database.Reference » vous devez récupérer les données qu'il contient. vous pouvez ajouter à votre crochet du cycle de vie vue mounted:

db.ref('school').once('value') 
.then((dataSnapshot) => { 
    this.schoolsArray = dataSnapshot.val(); 
}); 

vous pouvez aussi utiliser la méthode .on qui déclenche automatiquement votre rappel à chaque fois que les modifications de données sur le serveur. alors assurez-vous de supprimer cela lorsque le composant est détruit. pour la documentation voir: https://firebase.google.com/docs/reference/js/firebase.database.Reference#once

+0

J'ai posté une autre image qui montre que les noms sont récupérés mais ne sont pas montrés sur le graphique! –

+0

cela aide-t-il si vous invoquez à nouveau votre méthode 'renderChart' dans le rappel' .once'? – user2520818

+0

oui J'utilise ce code dans le hook du cycle de vie des méthodes et je l'appelle à l'intérieur monté avant le renderChart mais je ne peux toujours pas voir les étiquettes de ma charte –