Я пытаюсь использовать vega-embed в проекте Vue.js (вместе с vuex для управления состоянием). По сути, бэкэнд обслуживает json-объект Vega, который получает интерфейс через HTTP-запрос GET с событием click. Однако мне нужно дважды щелкнуть, чтобы отобразить график, и событие первого щелчка всегда вызывает ошибку «Uncaught (in promise) TypeError: Cannot read property '$schema' of null
». Может кто-нибудь помочь мне отладить? Очень ценится. Подробности показаны ниже:
Файл компонента vue:
<template>
<button @click.native="fetchCars(); displayVegaPlot()">fetch cars</button>
<div id="vega-example"></div>
</template>
<script>
import {default as vegaEmbed} from 'vega-embed'
import {
mapState
} from 'vuex'
export default {
name: 'VegaExample',
props: {
component_msg: String
},
methods: {
fetchCars () {
this.$store.dispatch('fetchCars')
},
displayVegaPlot () {
vegaEmbed('#vega-example', this.vega_cars, {actions: false})
}
},
computed: {
...mapState([
'vega_cars'
])
}
}
</script>
... и файл js магазина:
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)
export default new Vuex.Store({
strict: true,
state: {
error: '',
vega_cars: null
},
mutations: {
SET_CARS: (state, cars) => {
state.vega_cars = cars
},
SET_ERROR: (state, error) => {
state.error = error
}
}
actions: {
fetchCars: (context) => {
axios.get(`vega_cars`)
.then(response => context.commit('SET_CARS', response.data))
.catch(error => context.commit('SET_ERROR', error))
}
}