Vue js Highmaps - 如何加载地图?
Vue js Highmaps - How to load map?
我对 Vue.js 有点陌生,但今天我正在尝试设置某种地图来显示数据。我最终选择了 Highmaps,因为它似乎是同类产品中最好的选择,而且我已经将它 (Highcharts) 用于其他项目。
现在问题出现了,因为我正在开发一个组件驱动的 webapp,但我想从 Highmaps 导入地图。因为他们只是使用 CDN 路径,所以我真的不知道如何使用 import 语句来实现它们。下面是一些代码,可以让你更好地理解。
--- main.js ---
import Vue from 'vue'
import App from './App'
import MapComponent from './components/MapComponent.vue'
import Highcharts from 'highcharts';
import HighMaps from '../node_modules/highcharts/highmaps.js'
import VueHighcharts from 'vue-highcharts'
import loadMap from 'highcharts/modules/map';
loadMap(Highcharts);
Vue.use(VueHighcharts, { Highcharts });
Vue.use(HighMaps);
Vue.component('app-map', MapComponent)
new Vue({
el: '#app',
router: router,
components: { App },
template: '<App/>'
})
------------------------
--- MapComponent.vue ---
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import Element from 'element-ui';
import axios from 'axios';
import HighCharts from 'vue-highcharts';
export default {
data () {
return {
chartOptions: {
chart: {
map: 'countries/it/it-all'
},
...
}
},
}
</script>
This is what you can see from the browser, the errors appear when I try to press the + / - or when I scroll inside the map's borders
正如您在脚本标签中看到的那样,我已经导入了一些库,但我也无法理解如何导入 Highmaps。
我在图片中看到你有一个错误:
Uncaught ReferenceError, HighCharts is not defined at ...
这是因为,无论何时为 Vue 导入库,都应该将其作为组件提供。
因此,您必须添加:
import HighCharts from 'vue-highcharts';
export default {
//...
components: { HighCharts },
//...
}
这里的问题是CDN导入VueHighcharts
,你可以全局注册为
Vue.use(VueHighcharts, { Highcharts: Highcharts })
然后到处使用它
<highmaps :options="options"></highmaps>
底部的例子
此外,最好通过 npm 安装它,以获得更好的模块化结构来使用 webpack(或任何你使用的)
现在我找到了一种方法(可能很俗气)通过将对象复制粘贴到变量中然后将其引用到 chart.map
中来强制地图数据进入地图本身
我知道这可能非常糟糕,因为 Vue 需要在组件内部编译所有对象,但我希望这是一个临时解决方案。
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import Element from 'element-ui';
import axios from 'axios';
import HighCharts from 'vue-highcharts';
export default {
data () {
var country= {"title":"Italy","version":"1.1.2","type":"FeatureCollection","copyright":"Copyright...}
return {
chartOptions: {
chart: {
map: country
},
...
}
</script>
您可以在 this url 找到地图数据(选择 GeoJSON 选项)
编辑
我终于找到了一个很好的方法,只需将地图的原始 json 数据保存到本地 .json 文件中,然后按如下方式导入:
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import HighCharts from 'vue-highcharts';
import json from '../map.json'
export default {
data () {
return {
chartOptions: {
chart: {
map: json,
},
...
}
</script>
我对 Vue.js 有点陌生,但今天我正在尝试设置某种地图来显示数据。我最终选择了 Highmaps,因为它似乎是同类产品中最好的选择,而且我已经将它 (Highcharts) 用于其他项目。
现在问题出现了,因为我正在开发一个组件驱动的 webapp,但我想从 Highmaps 导入地图。因为他们只是使用 CDN 路径,所以我真的不知道如何使用 import 语句来实现它们。下面是一些代码,可以让你更好地理解。
--- main.js ---
import Vue from 'vue'
import App from './App'
import MapComponent from './components/MapComponent.vue'
import Highcharts from 'highcharts';
import HighMaps from '../node_modules/highcharts/highmaps.js'
import VueHighcharts from 'vue-highcharts'
import loadMap from 'highcharts/modules/map';
loadMap(Highcharts);
Vue.use(VueHighcharts, { Highcharts });
Vue.use(HighMaps);
Vue.component('app-map', MapComponent)
new Vue({
el: '#app',
router: router,
components: { App },
template: '<App/>'
})
------------------------
--- MapComponent.vue ---
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import Element from 'element-ui';
import axios from 'axios';
import HighCharts from 'vue-highcharts';
export default {
data () {
return {
chartOptions: {
chart: {
map: 'countries/it/it-all'
},
...
}
},
}
</script>
This is what you can see from the browser, the errors appear when I try to press the + / - or when I scroll inside the map's borders
正如您在脚本标签中看到的那样,我已经导入了一些库,但我也无法理解如何导入 Highmaps。
我在图片中看到你有一个错误:
Uncaught ReferenceError, HighCharts is not defined at ...
这是因为,无论何时为 Vue 导入库,都应该将其作为组件提供。
因此,您必须添加:
import HighCharts from 'vue-highcharts';
export default {
//...
components: { HighCharts },
//...
}
这里的问题是CDN导入VueHighcharts
,你可以全局注册为
Vue.use(VueHighcharts, { Highcharts: Highcharts })
然后到处使用它
<highmaps :options="options"></highmaps>
底部的例子
此外,最好通过 npm 安装它,以获得更好的模块化结构来使用 webpack(或任何你使用的)
现在我找到了一种方法(可能很俗气)通过将对象复制粘贴到变量中然后将其引用到 chart.map
中来强制地图数据进入地图本身我知道这可能非常糟糕,因为 Vue 需要在组件内部编译所有对象,但我希望这是一个临时解决方案。
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import Element from 'element-ui';
import axios from 'axios';
import HighCharts from 'vue-highcharts';
export default {
data () {
var country= {"title":"Italy","version":"1.1.2","type":"FeatureCollection","copyright":"Copyright...}
return {
chartOptions: {
chart: {
map: country
},
...
}
</script>
您可以在 this url 找到地图数据(选择 GeoJSON 选项)
编辑
我终于找到了一个很好的方法,只需将地图的原始 json 数据保存到本地 .json 文件中,然后按如下方式导入:
<template>
<div>
<highmaps :options="chartOptions"></highmaps>
</div>
</template>
<script>
import HighCharts from 'vue-highcharts';
import json from '../map.json'
export default {
data () {
return {
chartOptions: {
chart: {
map: json,
},
...
}
</script>