Javascript 初始化后在Vue中使用Mapbox GL JS
下面是我的Javascript 初始化后在Vue中使用Mapbox GL JS,javascript,vue.js,mapbox-gl-js,Javascript,Vue.js,Mapbox Gl Js,下面是我的Map.vue,其中部分代码被缩写,因此我不会公开任何信息。地图是我的应用程序的一个组件,我想添加一些交互。但是,我的方法不起作用,说读取未定义的的属性“getPitch”。如何初始化映射,使Mapbox的函数在以后仍然可用 <template> <div id="map" class="map"> <button @click="getPitch">Test<
Map.vue
,其中部分代码被缩写,因此我不会公开任何信息。地图是我的应用程序的一个组件,我想添加一些交互。但是,我的方法
不起作用,说读取未定义的的属性“getPitch”。如何初始化映射,使Mapbox的函数在以后仍然可用
<template>
<div id="map" class="map">
<button @click="getPitch">Test</button>
</div>
</template>
<script>
import mapboxgl from 'mapbox-gl';
export default {
name: "Map",
data() {
return {
};
},
props: {
mapdata: {
type: Object,
default: () => { return {}; }
}
},
beforeUpdate() {
mapboxgl.accessToken = "...";
const map = new mapboxgl.Map({
container: "map",
style: "...",
center: ...,
zoom: 11.85,
});
let mapRecords = this.mapdata.data;
map.once('styledata', function() {
map.addSource('...', {
...
});
map.addLayer({
...
})
});
},
methods: {
getPitch() {
map.getPitch();
}
}
};
</script>
<style scoped>
...
</style>
试验
从“mapbox gl”导入mapboxgl;
导出默认值{
名称:“地图”,
数据(){
返回{
};
},
道具:{
地图数据:{
类型:对象,
默认值:()=>{return{};}
}
},
更新之前(){
mapboxgl.accessToken=“…”;
常量映射=新的mapboxgl.map({
容器:“地图”,
风格:“…”,
中心:。。。,
缩放:11.85,
});
让mapRecords=this.mapdata.data;
map.once('styledata',function(){
map.addSource(“…”{
...
});
map.addLayer({
...
})
});
},
方法:{
getPitch(){
map.getPitch();
}
}
};
...
已解决
首先,将beforeUpdate()
中的所有map
实例更改为this.map
。然后,在getPitch
函数中,添加以下行:let map=this.map代码>在更新之前
看起来不像右钩子。您可能应该使用mounted
另外,变量map
超出了getPitch
方法的作用域。我假设这又是Vue 3?在更新之前仍然有效,因为我正在等待来自父对象的数据(mapdata
对象)。至于第二部分,您是对的。但是,如果mapdata
发生更改,您将创建一个全新的map
实例,这可能不是您想要的。