Разбор 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
}
});
})
}