事先準備javascript
1. 首先,註冊開發者帳號,成爲高德開放平臺開發者css
2. 登錄以後,在進入「應用管理」 頁面「建立新應用」vue
3. 爲應用添加 Key,「服務平臺」一項請選擇「 Web 端 ( JSAPI ) 」java
1、安裝git
1.npm安裝(推薦)github
經過 npm install --save vue-amap 來安裝npm
2.CDNapi
目前可經過 unpkg.com/vue-amap 獲取最新版本的資源。app
經過script引入 <script src="https://unpkg.com/vue-amap/dist/index.js"></script>ide
2、使用
1.在插件目錄plugins下,新建一個vue-map.js文件
import Vue from 'vue'; import VueAMap from 'vue-amap'; Vue.use(VueAMap); // 初始化vue-amap
if (!Vue.prototype.$isServer) { VueAMap.initAMapApiLoader({ // 高德的key
key: 'your key', // 插件集合
plugin: ['AMap.Geolocation', 'AMap.Marker', 'AMap.ToolBar', 'AMap.Circle', 'AMap.PolyLine'], uiVersion: '1.0', // 高德 sdk 版本,默認爲 1.4.4
v: '1.4.8' }); }
這裏的key爲事先準備時候註冊的key值,填到這裏就能夠了,以下圖所示
2.在配置文件nuxt.cofig.js中的plugins裏添加剛纔寫的vue-map.js文件,以下圖所示
3.而後在頁面就可使用el-map來使用地圖了,地圖的屬性經過頁面的值來賦予
<template>
<section style="width: 1000px; height: 800px;">
<no-ssr>
<el-amap vid="amap" :plugin="plugin" class="amap-demo" :center="center" :events="events">
<el-amap-marker v-for="(marker, index) in markers" :position="marker.position" :key="index" :vid="index" :events="marker.events"></el-amap-marker>
<el-amap-circle :center="circle.center" :radius="circle.radius" :fill-opacity="0.5" fill-color="#ffb5b3" stroke-color="#ffb5b3"></el-amap-circle>
<el-amap-polyline :path="polyline.path"></el-amap-polyline>
</el-amap>
</no-ssr>
</section>
</template>
<script> import * as _ from 'lodash'; export default { data() { let self = this; return { center: [121.59996, 31.197646], events: { init(map) { let markers = _.cloneDeep(self.markers); markers.forEach((item, index) => { AMapUI.loadUI(['overlay/SimpleMarker'], function (SimpleMarker) { item = new SimpleMarker({ iconLabel: { innerHTML: index, style: { color: '#fff' } }, iconStyle: '#1995f5', map: map, position: item.position }); }); }); } }, lng: 0, lat: 0, plugin: [{ pName: 'Geolocation', events: { click: (o) => { o.getCurrentPosition((status, result) => { if (result && result.position) { self.lng = result.position.lng; self.lat = result.position.lat; self.center = [self.lng, self.lat]; self.$nextTick(); } }); } }, buttonPosition: 'LT' }], markers: [ { position: [121.59996, 31.197646], events: { click: () => { this.$router.push({path: '/single/250'}); } }, visible: true, clickable: true }, { position: [122.59996, 32.197646], events: { click: () => { this.$router.push({path: '/single/250'}); } }, visible: true, clickable: true } ], circle: { center: [121.59996, 31.197646], radius: 6000 }, polyline: { path: [[121.59996, 31.1976461], [121.5389385, 31.197646]] } }; }, methods: { }, mounted() { }, beforeDestroy() { } }; </script>
而後 npm run dev 運行程序便可看到效果
注意事項:
1.兩個參考文檔
https://elemefe.github.io/vue-amap/#/zh-cn/introduction/install (amap)
https://lbs.amap.com/api/javascript-api/guide/abc/prepare(高德)
2.vue-amap
可以拋開高德原生 SDK 覆蓋大多數場景,但對於部分定製化程度較高的場景而言,可能仍是須要引入高德原生 SDK 來支持。
對於大多數 vue-amap
組件,都有 init
這個 event
,參數爲高德的實例,經過這樣暴露高德實例的方式,開發者可以很是自由地將原生 SDK 和 vue-amap 結合起來使用。
若涉及到高德原生 AMap
須要注意的點:
vue-amap
的導入名不是 AMap
,推薦 import VueAMap from 'vue-amap'
避免和高德全局的 AMap
衝突。eslint
報錯 AMap is undefined
之類的錯誤。請將 AMap
配置到 .eslintrc
的 globals
中。
<template>
<div class="amap-page-container">
<el-amap vid="amapDemo" :center="center" :amap-manager="amapManager" :zoom="zoom" :events="events" class="amap-demo">
</el-amap>
<div class="toolbar">
<button @click="add()">add marker</button>
</div>
</div>
</template>
<style> .amap-demo { height: 300px;
}
</style>
<script>
// NPM 方式
// import { AMapManager } from 'vue-amap';
// CDN 方式
let amapManager = new VueAMap.AMapManager(); module.exports = { data: function() { return { zoom: 12, center: [121.59996, 31.197646], amapManager, events: { init(o) { let marker = new AMap.Marker({ position: [121.59996, 31.197646] }); marker.setMap(o); } } }; }, methods: { add() { let o = amapManager.getMap(); let marker = new AMap.Marker({ position: [121.59996, 31.177646] }); marker.setMap(o); } } }; </script>