VueJS wywołanie funkcji z created

0

Witam, jak wywołać funkcję z created? Mam taki kod, nie działa (probowałem dodać this, nie pomaga)

...
    loadFromDatabase(){
      let docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid);
      docRef.get().then(function(doc) {
        if (doc.exists) {
            this.notepad=doc.data().notepad;

        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
      }).catch(function(error) {
            console.log("Error getting document:", error);
      });
    }
  },
  created: ()=>{
    loadFromDatabase();
  }
...
0
export default {
  foo: () => {
  },

  bar() { // bądź bar: function() {
  },
};

Różnica między foo oraz bar polega na tym, że foo (tak jak u Ciebie created) zostało zbudowane z wykorzystaniem funkcji strzałeczkowej (arrow function), przez co przejmuje this z otaczającego ją kontekstu - Ty potrzebujesz bar().

0

@Patryk27: dobra, dałem tak:

 loadFromDatabase(){
      let docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid);
      docRef.get().then(function(doc) {
        if (doc.exists) {
            this.notepad=doc.data().notepad;

        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
      }).catch(function(error) {
            console.log("Error getting document:", error);
      });
    }
  },
  created(){
    loadFromDatabase();
  }

wciąż nie znajduje funkcji loadfromdatabase

0

this.loadFromDatabase();.

0

@Patryk27: Error getting document: TypeError: "this is undefined"

0

Wrzuć więcej kodu.

0

cały plik

<template>
  <div>
    <md-field>
      <label>Personal Notepad (saved automatically)</label>
      <md-textarea v-on:keypress="saveToDatabase" v-model="notepadTextarea"></md-textarea>
    </md-field>
  </div>
</template>

<script>
import firebase from 'firebase';
import { setTimeout } from 'timers';
// import { db } from '@/db';

export default {
  name: 'notepad',
  data() {
    return {
      notepadTextarea: '',
      notepadTextareaCached: '',
      documents: [],
    };
  },
  methods: {
    saveToDatabase(){
      console.log("Saving in progress..");
      let docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid);
      docRef.get().then(function(doc) {
        if (doc.exists) {
            console.log("Document data:", doc.data().notepad);
            docRef.set({notepad: "xd"})
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
      }).catch(function(error) {
            console.log("Error getting document:", error);
      });
    },
    loadFromDatabase(){
      let docRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid);
      docRef.get().then(function(doc) {
        if (doc.exists) {
            this.notepad=doc.data().notepad;

        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
      }).catch(function(error) {
            console.log("Error getting document:", error);
      });
    }
  },
  created(){
    this.loadFromDatabase();
  }
  // firestore: {
  //   documents: db.collection('users'),
  // },
};
</script>

<style lang="scss" scoped>

</style>

0

Oki, wrzuć jeszcze screena z konsoli przeglądarki.

0

screenshot-20190806144454.png

1
docRef.get().then((doc) => { // wcześniej miałeś tutaj function(), które tworzyło *nowe* this
  if (doc.exists) {
    this.notepad = doc.data().notepad;
0

Rzeczywiście, nie zauważyłem tego, dziękuje bardzo!

1 użytkowników online, w tym zalogowanych: 0, gości: 1