Не удается получить доступ к данным json в компоненте

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я пытаюсь получить данные json из XMLHttpRequest, и это работает хорошо, поэтому я вижу данные в консоли. Но компонент, который должен показывать эти данные, не показывает никаких… Что-то не так? Может быть, неправильно вызывать функцию в mounted()? Я также вызвал это в created (), но ничего не изменилось… Есть идеи?

в скрипте

     data(){
       return{
        json: {}
       }
    }

    mounted(){
     var gsRef = firebase.storage().refFromURL('XXXXXXXXX')
   gsRef.child(firebase.auth().currentUser.uid '.json').getDownloadURL().then(function(url){
            var xhr = new XMLHttpRequest()
            xhr.responseType = 'json'
            xhr.onload = function() {
              this.json = xhr.response
              console.log(this.json.user) //works shows the data!
            }
            xhr.open('GET',url)
            xhr.send()
          })
      }
  

в шаблоне

 <h1>{{json.user}}</h1> //doenst work. Cannot access data
  

Ответ №1:

«это», вероятно, относится к неправильному контексту (т. Е. не к экземпляру vue). Попробуйте сохранить ссылку на соответствующий, this перед вашим вызовом firebase, что-то вроде const self = this , а затем используйте self.json для установки данных.

 mounted(){
     var self = this
     var gsRef = firebase.storage().refFromURL('XXXXXXXXX')
   gsRef.child(firebase.auth().currentUser.uid '.json').getDownloadURL().then(function(url){
            var xhr = new XMLHttpRequest()
            xhr.responseType = 'json'
            xhr.onload = function() {
              self.json = xhr.response
              console.log(self.json.user) //works shows the data!
            }
            xhr.open('GET',url)
            xhr.send()
          })
      }