Разбор XML из ответа Axios, отправка в массив данных Vue

В моем приложении Vue я получаю XML-файл с Axios и использую parseString для анализа XML как JSON. Затем мне нужно передать result Vue data (this.events). Мой журнал консоли показывает проанализированный XML как Json, но я не могу передать данные Vue внутри этой функции.

var parseString = require('xml2js').parseString;

axios.get(`http://url.to/events.xml`)
  .then(response => {
    parseString(response.data, function (err, result) {
      console.log(result); // returns a json array
      this.events = result // nothing happens
    });        
  })
}

Как сохранить мой массив JSON в this.data в Vue?

1 ответ

Решение

Старайтесь не использовать this внутри parseString, может быть, это проблема сферы, что означает this не ссылается на объект данных vue.

Попробуй это:

axios.get('http://url.to/events.xml')
  .then(response => {
    var self = this; 
    parseString(response.data, function (err, result) {
      self.events = result
    });        
  })
}

Ответ выше правильный. Тем не менее, я бы просто использовал функции стрелок везде, поэтому this всегда является компонентом класса VUE. Кроме того, я бы проверил ошибки синтаксического анализа.

axios.get('http://url.to/events.xml')
  .then(response => {
    parseString(response.data, (err, result) => {
      if(err) {
       //Do something
      } else {
       this.events = result
     }
    });        
  })
}
Другие вопросы по тегам