gpt4 book ai didi

javascript - Vuejs : loading topojson from store and plot with d3

转载 作者:行者123 更新时间:2023-12-03 03:49:54 28 4
gpt4 key购买 nike

我遇到的问题与这个问题类似: Vue.js/vuex ajax update components with ajax state

首先,我想将一些静态 topojson 文件加载到商店。这发生在 main.js 中挂载主 vue 实例时:

new Vue({
...
mounted () {
this.$store.dispatch('topojsonStore/loadMunicipalityTopo',
'static/topojson_data/gem_2014.topojson')
}
})

这可以毫无问题地加载到商店中。在我想要可视化此数据的组件中,我可以很好地从商店访问此数据:

computed: {
getMunicipalityTopo () {
return this.$store.getters['topojsonStore/getMunicipalityTopo']
}
}

我将绘图功能放在组件中的一个方法下:

methods: {
plotMunicipalities () {
var width = 650,
height = 770
var path = d3.geoPath()
.projection(null) // TODO: fix projections
var svg = d3.select('#map').append('svg')
.attr('width', width)
.attr('height', height)
// Load topojson from store
let topoJsonData = this.getMunicipalityTopo
svg.append('path')
.attr('class', 'municipalities')
.datum(topoJsonData)
.attr('d', path)
}

如果我将其附加到模板中的点击事件,则效果很好,如下所示:

<button @click="plotMunicipalities()">Plot municipalities</button>

但是,我想在页面加载时自动绘制这些东西,而不是在单击事件之后。这就是我遇到异步问题的地方......例如,将其放入组件中是行不通的,因为存储中的数据仍未加载:

mounted () {
this.plotMunicipalities()
}

我该如何离开这里?商店中的数据加载完毕后如何触发该函数?我应该稍后提到,将加载不同的层。有些层用户将无法更改,但对于该特定层,用户可以更改它。我应该对这些不同的层使用不同的工作流程吗?

最佳答案

实现此目的的一种方法是通过创建一个空的 vue 实例来设置全局事件总线

var EventBus = new Vue({});

然后让您的 topojsonStore/loadMunicipalityTopo 操作返回如下 promise :

actions: {
topojsonStore/loadMunicipalityTopo: ({commit}) => {
return new Promise((resolve, reject) => {
commit(...);
resolve();
});
}
}

然后分派(dispatch)该操作,以便您可以使用成功回调并发出如下事件:

new Vue({
...
mounted () {
this.$store.dispatch('topojsonStore/loadMunicipalityTopo',
'static/topojson_data/gem_2014.topojson').then(() => {
EventBus.$emit('store-json-loaded');
})
}
})

现在,在要绘制的组件的已创建 Hook 中设置一个事件监听器,如下所示:

created(){
EventBus.$on('store-json-loaded', () => {
this.plotMunicipalities();
});
}

关于javascript - Vuejs : loading topojson from store and plot with d3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45210700/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com